Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用具有多个数据帧列的plyr和cor_R_Plyr - Fatal编程技术网

使用具有多个数据帧列的plyr和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

我想使用带有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.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呢?