【问题标题】:Correlation between two dataframes by row两个数据帧之间的相关性(按行)
【发布时间】:2012-02-26 12:16:39
【问题描述】:

我有 2 个数据框,每个数据框有 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 来做到这一点,但似乎无法做到正确。有什么建议吗?

【问题讨论】:

    标签: r dataframe correlation plyr


    【解决方案1】:

    根据您是想要一个酷的还是快速的解决方案,您可以使用任何一种

    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 第一个很酷。此外,t(as.matrix(df1)) 可以变为t(df1) 等,因为当t() 被传递一个data.frame 时,对矩阵的强制是隐式发生的。
    • 啊,太好了,谢谢(这是我的低级思维让我想到的地方;)),我会编辑它
    • 做到了。非常感谢。
    【解决方案2】:

    我发现as.matrix 不是必需的。

    数据帧df1df2之间所有行对的相关性:

    sapply(1:nrow(df1), function(i) cor(df1[i,], df2[i,]))
    

    和列:

    sapply(1:ncol(df1), function(i) cor(df1[,i], df2[,i]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多