我有一个大型数据框。我想按类
计算 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)
答案 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
请注意,class
和df
是R函数,这些名称可能会导致问题。