如何通过因子找到两列之间的相关系数?

时间:2014-09-12 20:46:49

标签: r

我有一个大型数据框。我想按类

计算 hot index 之间的相关系数
ID    hot   index class
41400 10      2   a
41400 12      2   a
41400 75      4   a
41401 89      5   a 
41401 25      3   c
41401 100     6   c
20445 67      4   c
20445 89      6   c
20445 4       1   c
20443 67      5   d
20443 120.2   7   a
20443 140.5   8   d
20423 170.5   10   d
20423 78.1    5   c

预期输出

a = 0.X (assumed numbers)
b = 0.Y
c = 0.Z

我知道我可以使用 by 命令,但我无法做到。

代码

cor_eqn = function(df){
  m = cor(hot ~ index, df);

}

by(df,df$class,cor_eqn,simplify = TRUE)

2 个答案:

答案 0 :(得分:2)

另一种选择是使用data.table而不是data.frame。您可以在现有的setDT(df)上致电data.frame(我最初在下面创建了data.table):

library(data.table)
##
set.seed(123)
DT <- data.table(
  ID=1:50000,
  class=rep(
    letters[1:4],
    each=12500),
  hot=rnorm(50000),
  index=rgamma(50000,shape=2))
## set key for better performance 
## with large data set
setkeyv(DT,class)
##
> DT[,list(Correlation=cor(hot,index)),by=class]
   class  Correlation
1:     a  0.005658200
2:     b  0.001651747
3:     c -0.002147164
4:     d -0.006248392

答案 1 :(得分:0)

您可以使用dplyr

library(dplyr)
gp = group_by(dataset, class)
correl = dplyr::summarise(gp, correl = cor(hot, index))
print(correl)

#  class   correl
#   a      0.9815492
#   c      0.9753372
#   d      0.9924337

请注意,classdf是R函数,这些名称可能会导致问题。