使用do()函数后,按给定的ID而不是数字输出

时间:2018-11-19 14:55:09

标签: r dplyr

我对dplyr中的do()函数有疑问。

让我们使用以下示例数据集:

set.seed(2409)
N=5
T=10
id<- rep(LETTERS[1:N],each=T)
time<-rep(1:T, times=N)
x<-runif(N*T,0,100)
y<-runif(N*T,0,100)
df<-data.frame(id,time,x,y); rm(N,T,time,id,x,y)

现在我要为所有ID运行一个函数(即相关性)。为此,我使用dplyr包中的group_by()和do()。

library(dplyr)
cor <- df %>%
  group_by(id) %>%
  do(cors=cor(.[3:4]))

到目前为止,一切都很好。我简单地得到输出

cor$cors

[[1]]
            x           y
x  1.00000000 -0.09895815
y -0.09895815  1.00000000

[[2]]
           x          y
x  1.0000000 -0.4127625
y -0.4127625  1.0000000

[[3]]
           x          y
x  1.0000000 -0.5516935
y -0.5516935  1.0000000

[[4]]
          x         y
x  1.000000 -0.219373
y -0.219373  1.000000

[[5]]
           x          y
x  1.0000000 -0.1789057
y -0.1789057  1.0000000

但是我如何使输出的标题带有ID而不是编号?所以我想要的是:

[[A]]
            x           y
x  1.00000000 -0.09895815
y -0.09895815  1.00000000

[[B]]
           x          y
x  1.0000000 -0.4127625
y -0.4127625  1.0000000

[[C]]
           x          y
x  1.0000000 -0.5516935
y -0.5516935  1.0000000

[[D]]
          x         y
x  1.000000 -0.219373
y -0.219373  1.000000

[[E]]
           x          y
x  1.0000000 -0.1789057
y -0.1789057  1.0000000

非常感谢您!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

library(dplyr)

cor <- df %>%
  group_by(id) %>%
  do(cors=cor(.[3:4]))

names(cor$cors) <- unique(cor$id)

输出:

$`A`
            x           y
x  1.00000000 -0.09895815
y -0.09895815  1.00000000

$B
           x          y
x  1.0000000 -0.4127625
y -0.4127625  1.0000000

$C
           x          y
x  1.0000000 -0.5516935
y -0.5516935  1.0000000

$D
          x         y
x  1.000000 -0.219373
y -0.219373  1.000000

$E
           x          y
x  1.0000000 -0.1789057
y -0.1789057  1.0000000