我对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
非常感谢您!
答案 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