我有一个带有50个数字列的分组数据框(使用dplyr
),使用其中一列将其拆分成组。我想计算所有非分组列和一个特定列之间的相关矩阵。
mtcars
数据集的示例:
data(mtcars)
cor(mtcars[,2:11], mtcars[,2])
返回每个帆船的里程与其他变量之间的相关性列表。
但是,我想说,我希望计算每组气瓶的相同相关性,例如:
library(dplyr)
mtcars <-
mtcars %>%
group_by(cyl)
我该怎么做?我在想像
这样的东西mtcars %>%
group_by(cyl) %>%
summarise_each(funs(cor(...))
但由于我不知道如何在...
链中指定列,我不知道该放在dplyr
中的内容。
相关:
Linear model and dplyr - a better solution?的答案与@ akrun的答案非常相似。此外,在交叉验证时:https://stats.stackexchange.com/questions/4040/r-compute-correlation-by-group还有其他解决方案使用的包不是dplyr
。
答案 0 :(得分:10)
我们可以使用do
。
library(dplyr)
mtcars %>%
group_by(cyl) %>%
do(data.frame(Cor=t(cor(.[,3:11], .[,3]))))
注意: t
部分由@Alex
或者
library(data.table)
d1 <- copy(mtcars)
setnames(setDT(d1)[, as.list(cor(.SD, .SD[[1]])) , cyl,
.SDcols=3:11], names(d1)[2:11])[]