我想计算R中数据集x的子集的列之间的相关系数我有40个模型的行,每个200个模拟总计8000行我想计算每个模拟的列之间的corr系数(40行)
cor(x[c(3,5)]) 从所有8000行计算我需要 cor(x[c(3,5)]) ,但仅限于 X$nsimul=1 等等
cor(x[c(3,5)])
X$nsimul=1
你能帮我解决这个问题
我'm not sure what exactly you'正在使用 x[c(3,5)] ,但看起来你想要做类似以下的事情:你有一个像这样的数据框 X :
x[c(3,5)]
X
set.seed(123) X <- data.frame(nsimul = rep(1:2, each=5), a = sample(1:10), b = sample(1:10)) > X nsimul a b 1 1 1 6 2 1 8 2 3 1 9 1 4 1 10 4 5 1 3 9 6 2 4 8 7 2 6 5 8 2 7 7 9 2 2 10 10 2 5 3
并且您希望通过 nsimul 列拆分此数据框,并计算每个组中 a 和 b 之间的相关性 . 这是一个典型的 split-apply-combine 问题, plyr 包非常适合:
nsimul
a
b
split-apply-combine
plyr
require(plyr) > ddply(X, .(nsimul), summarize, cor_a_b = cor(a,b)) nsimul cor_a_b 1 1 -0.7549232 2 2 -0.5964848
您可以使用 by 功能,例如:
by
correlations <- as.list(by(data=x,INDICES=x$nsimul,FUN=function(x) cor(x[3],x[5]))) # now you can access to correlation for each simulation correlations["simulation 1"] correlations["simulation 2"] ... correlations["simulation 40"]
2 回答
我'm not sure what exactly you'正在使用
x[c(3,5)]
,但看起来你想要做类似以下的事情:你有一个像这样的数据框X
:并且您希望通过
nsimul
列拆分此数据框,并计算每个组中a
和b
之间的相关性 . 这是一个典型的split-apply-combine
问题,plyr
包非常适合:您可以使用
by
功能,例如: