我希望能够在R中计算数据集x的子集中列之间的相关系数。我的数据集包含了40个模型,每个模型有200次模拟,总共8000行。我需要为每个模拟(40行)计算它们之间的相关系数。
cor(x[c(3,5)])
可以计算所有8000行的相关系数。
我需要cor(x[c(3,5)])
,但只限于当 X$nsimul=1
时的结果,依此类推。
您能帮助我吗? San
我希望能够在R中计算数据集x的子集中列之间的相关系数。我的数据集包含了40个模型,每个模型有200次模拟,总共8000行。我需要为每个模拟(40行)计算它们之间的相关系数。
cor(x[c(3,5)])
可以计算所有8000行的相关系数。
我需要cor(x[c(3,5)])
,但只限于当 X$nsimul=1
时的结果,依此类推。
您能帮助我吗? San
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
包解决:
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
函数,例如:
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"]
cor(x[X$nsimul==1,c(3,5)])
?没有可重现的示例,这个问题很难回答。 - Sacha Epskamp