2014-09-12 117 views
1

我有一個很大的數據框。我想計算指數之間的相關係數,按類如何找到兩列之間的相關係數?

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 

我知道我可以使用通過命令,但我不能至。

代碼

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

} 

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

回答

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的功能,像這樣的名字可以帶來麻煩。

+0

包「dplyr」不可用(對於R版本3.0.1)?不知道發生了什麼 – maximusyoda 2014-09-12 21:00:55

+0

也許你需要安裝它:'install.packages('dplyr')' – Fernando 2014-09-12 21:01:23

+0

它說它不適用於R版本3.0.1) – maximusyoda 2014-09-12 21:01:41

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