我想从两个不同的数据帧计算两列的相关性。

例如:

数据框1:

identifier  description Score
qzqzgz  desc1   0.12
zzqzgq  desc2   8.98
zzqzgg  desc3   0.55
zzqzgc  desc4   3.66
zzqzgz  desc5   1.22
qqzgzz  desc6   -30.23
zqzgzq  desc6   7.88
zqzgzg  desc6   6.45
zqzgzc  desc6   2.33
zqzgzz  desc6   1.02


dataframe2:

    identifier  description S1  S2  S3  S4  S5     S6
    qzqzgz  desc1   9   3   4   6   7   4
    zzqzgq  desc2   5   3   6   2   3   6
    zzqzgg  desc3   9   9   12  12  14  13
    zzqzgc  desc4   6   4   8   6   6   6
    zzqzgz  desc5   10  5   5   5   5   11
    qqzgzz  desc6   11  12  17  12  11  17
    zqzgzq  desc6   8   2   1   4   4   3
    zqzgzg  desc6   2   4   9   9   5   10
    zqzgzc  desc6   7   5   8   5   7   3
    zqzgzz  desc6   11  5   7   9   9   12


我想计算之间的相关性:
dataframe1的第三列(分数)和dataframe2的第三列(S1)。
dataframe1的第三列(分数)和dataframe2的第三列(S2)。
dataframe1的第三列(分数)和dataframe2的第三列(S3)。
dataframe1的第三列(分数)和dataframe2的第三列(S4)。
等等。

到目前为止,这是我写的:

    for (i in 3:8)
       {
         cortop[i] <- cor(dataframe1$Score_top,dataframe2$i)
          }


我是R的新手。请帮助编写一个循环。

最佳答案

您在这里不需要循环:

cor(dataframe1$Score, dataframe2[-c(1:2)])

#             S1         S2         S3        S4       S5         S6
# [1,] -0.555369 -0.8556331 -0.7682521 -0.629983 -0.57097 -0.6790326


顺便说一句:您的代码无法正常工作,因为您不能将$与变量一起使用。因此,必须将dataframe2$i替换为dataframe2[[i]]才能访问第i列。



更新:

由于dataframe2中的值是因子,因此在使用cor之前必须将它们转换为数值:

cor(dataframe1$Score, "storage.mode<-"(as.matrix(dataframe2[-c(1:2)]), "numeric"))

09-25 21:26