我有2个数据帧w / 5列,每行100行。
id price1 price2 price3 price4 price5
1 11.22 25.33 66.47 53.76 77.42
2 33.56 33.77 44.77 34.55 57.42
...
我想获得相应行的相关性,基本上是
for(i in 1:100){
cor(df1[i, 1:5], df2[i, 1:5])
}
但不使用for循环。我假设有人使用plyr
来做这件事,但似乎无法做到正确。有什么建议吗?
答案 0 :(得分:21)
根据您是否需要酷或快的解决方案,您可以使用
diag(cor(t(df1), t(df2)))
这很酷但很浪费(因为它实际上计算了你并不真正需要的所有行之间的相关性,因此它们将被丢弃)或
A <- as.matrix(df1)
B <- as.matrix(df2)
sapply(seq.int(dim(A)[1]), function(i) cor(A[i,], B[i,]))
只能按你的意愿行事,但输入的内容会更多。
答案 1 :(得分:5)
我发现不需要as.matrix
。
数据框df1
和df2
之间所有行对的相关性:
sapply(1:nrow(df1), function(i) cor(df1[i,], df2[i,]))
和列:
sapply(1:ncol(df1), function(i) cor(df1[,i], df2[,i]))