使用ddply查找R的不同组的数据帧的相关性

时间:2014-11-06 09:41:33

标签: r plyr

ds <- structure(list(GPA = c(1.78, 2.38, 2.43, 1.98, 1.56, 2.32, 1.96, 
2.73, 2, 3.59), STUDY_STAGE = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L), OLAGG = c(18, 14, 14, 17, 17, 16, 16, 15, 14, 15)), .Names = c("GPA", 
"STUDY_STAGE", "OLAGG"), row.names = c(NA, 10L), class = "data.frame")

我已经参考了这篇文章 spearman correlation by group in R

然而,当我试图根据子组STUDY_STAGE(有3个)找到相关性时,我获得了所有相同的值。

ddply(ds,.(STUDY_STAGE), summarise, cor(ds$GPA, ds$OLAGG, method = "spearman")) 
STUDY_STAGE        ..1
1           1 -0.2805924
2           2 -0.2805924
3           3 -0.2805924

有关数据框的其他信息

str(ds)
'data.frame':   3167 obs. of  3 variables:
$ GPA        : num  1.78 2.38 2.43 1.98 1.56 2.32 1.96 2.73 2 3.59 ...
$ STUDY_STAGE: int  3 3 3 3 3 3 3 3 3 3 ...
$ OLAGG      : num  18 14 14 17 17 16 16 15 14 15 ...

只是为了表明他们应该有不同的相关值:

ds.yr1<-ds[ds$STUDY_STAGE=="Yr 1",]
cor(ds.yr1$GPA, ds.yr1$OLAGG)
[1] -0.3313926

ds.yr2<-ds[ds$STUDY_STAGE=="Yr 2",]
cor(ds.yr2$GPA, ds.yr2$OLAGG)
[1] -0.2905399

此处提供完整数据:https://dl.dropboxusercontent.com/u/64487083/R/mydata.csv

问题: 如何找到3个不同study_stage的相关性?

谢谢大家的时间和精力!

1 个答案:

答案 0 :(得分:1)

通过使用ds$GPAds$OLAGG,我们计算的是整个列的cor而不是群组。

 ds <- read.csv("mydata.csv") #full data from the link

 cor(ds$GPA, ds$OLAGG, method='spearman')
 #[1] -0.2805924


ddply(ds,.(STUDY_STAGE), summarise, Cor=cor(GPA, OLAGG, method = "spearman"))
#    STUDY_STAGE        Cor
#1        Yr 1 -0.3337192
#2        Yr 2 -0.2803793
#3        Yr 3 -0.2090219

cor(ds.yr1$GPA, ds.yr1$OLAGG, method='spearman')
#[1] -0.3337192