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



我有一个关于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

非常感谢!

你可以做:

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

最新更新