我有以下数据框:
y <- data.frame(group = letters[1:5], a = rnorm(5) , b = rnorm(5), c = rnorm(5), d = rnorm(5) )
如何获得一个数据框,它给出了每行的列a,b和c,d之间的相关性?
类似于:sapply(y, function(x) {cor(x[2:3],x[4:5])})
谢谢你, 小号
答案 0 :(得分:2)
您可以使用apply
> apply(y[,-1],1,function(x) cor(x[1:2],x[3:4]))
[1] -1 -1 1 -1 1
或ddply
(虽然这可能有点过分,如果两行具有相同的group
,则会对这些行的列a&amp; b和c&amp; d进行关联):
> ddply(y,.(group),function(x) cor(c(x$a,x$b),c(x$c,x$d)))
group V1
1 a -1
2 b -1
3 c 1
4 d -1
5 e 1
答案 1 :(得分:1)
您可以使用apply
将函数应用于矩阵,数组或data.frame的每一行(或列)。
apply(
y[,-1], # Remove the first column, to ensure that u remains numeric
1, # Apply the function on each row
function(u) cor( u[1:2], u[3:4] )
)
(只有2次观察,相关性只能是+1或-1。)
答案 2 :(得分:1)
你几乎就在那里:你只需要使用apply
而不是sapply
,并删除不必要的列。
apply(y[-1], 1, function(x) cor(x[1:2], x[3:4])
当然,两个长度为2的向量之间的相关性并不是很有用....