繁体   English   中英

通过汇总数据帧的列来计算相关性

[英]Calculate correlation by aggregating columns of data frame

我有以下数据框:

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])})

谢谢S

您可以使用apply

> apply(y[,-1],1,function(x) cor(x[1:2],x[3:4]))
[1] -1 -1  1 -1 1

ddply (尽管这可能会过大,并且如果两行具有相同的group ,它将对这两行进行a&b和c&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

您可以使用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。)

差不多了:您只需要使用apply而不是sapply ,并删除不必要的列。

apply(y[-1], 1, function(x) cor(x[1:2], x[3:4])

当然,两个长度为2的向量之间的相关性不是非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM