使用具有多个数据帧列的plyr和cor
我想使用带有cor的使用具有多个数据帧列的plyr和cor,r,plyr,R,Plyr,我想使用带有cor的ddply(package plyr)来计算皮尔逊相关系数除以一个因子(“Plot”)。当列作为列名传递给cor时,我可以成功地做到这一点,但当通过列编号传递时,我就不能做到这一点 日期框架: head(chlor2013.df) Plot X645 X665 Chlorophyll 1 1 0.019 0.054 0.3647 2 1 0.061 0.170 1.1588 3 1 0.021 0.054 0
ddply
(package plyr)来计算皮尔逊相关系数除以一个因子(“Plot”)。当列作为列名传递给cor时,我可以成功地做到这一点,但当通过列编号传递时,我就不能做到这一点
日期框架:
head(chlor2013.df)
Plot X645 X665 Chlorophyll
1 1 0.019 0.054 0.3647
2 1 0.061 0.170 1.1588
3 1 0.021 0.054 0.3827
4 2 0.033 0.092 0.6270
5 2 0.055 0.148 1.0259
6 2 0.018 0.045 0.3234
使用ddply
和cor
,以及数据框的列名:
ddply(chlor2013.df, .(Plot), summarize, cor.v2.v3 = cor(X645,X665, use="complete.obs"))
Plot cor.v2.v3
1 1 0.9610698
2 2 0.9261662
3 3 0.9191197
4 4 0.9104561
5 5 0.9541877
6 6 0.8750801
7 7 0.9949413
ddply(chlor2013.df, .(Plot), summarize, cor.v2.v3 = cor(chlor2013.df[2:3],
use="complete.obs"))
Plot cor.v2.v3.1 cor.v2.v3.2
1 1 1.0000000 0.9698445
2 1 0.9698445 1.0000000
3 2 1.0000000 0.9698445
4 2 0.9698445 1.0000000
5 3 1.0000000 0.9698445
6 3 0.9698445 1.0000000
7 4 1.0000000 0.9698445
8 4 0.9698445 1.0000000
9 5 1.0000000 0.9698445
10 5 0.9698445 1.0000000
11 6 1.0000000 0.9698445
12 6 0.9698445 1.0000000
13 7 1.0000000 0.9698445
请注意,每行显示一个唯一的相关性值。以上就是我想要的
使用ddply
和cor
,以及数据帧的列号:
ddply(chlor2013.df, .(Plot), summarize, cor.v2.v3 = cor(X645,X665, use="complete.obs"))
Plot cor.v2.v3
1 1 0.9610698
2 2 0.9261662
3 3 0.9191197
4 4 0.9104561
5 5 0.9541877
6 6 0.8750801
7 7 0.9949413
ddply(chlor2013.df, .(Plot), summarize, cor.v2.v3 = cor(chlor2013.df[2:3],
use="complete.obs"))
Plot cor.v2.v3.1 cor.v2.v3.2
1 1 1.0000000 0.9698445
2 1 0.9698445 1.0000000
3 2 1.0000000 0.9698445
4 2 0.9698445 1.0000000
5 3 1.0000000 0.9698445
6 3 0.9698445 1.0000000
7 4 1.0000000 0.9698445
8 4 0.9698445 1.0000000
9 5 1.0000000 0.9698445
10 5 0.9698445 1.0000000
11 6 1.0000000 0.9698445
12 6 0.9698445 1.0000000
13 7 1.0000000 0.9698445
现在,所有的r值都是相同的,表示两列之间的相关性,而不是按因子拆分。因此,列号语法的工作原理与列名语法不同。我错过了什么
最后,我想计算所有三个变量的相关矩阵:X645、X665和叶绿素,按图分割
谢谢您需要使用匿名函数引用'chlor2013.df'的每个子集。在您最初的尝试中,每个“绘图”级别的所有计算都使用了相同的数据集,
chlor2013.df[2:3]
。还请注意,cor(df[2:3])
与cor(df[2],df[3])
不同(与第一次调用相比:cor(X645,X665
)
更新以下评论在上面的例子中,cor输入了两个数字向量“X645”和“X665”。您也可以使用数字矩阵或数据帧作为输入来创建“多元样本的相关矩阵”(请参见
?cor
,例如cor(longley)
)
这可以计算两列的r,但为什么不能计算两列以上的r呢?