我是R.的新手
我有兴趣为我的数据计算Pearson Correlations . 我已经成功地弄清楚如何计算我的数据集x和y中两个连续变量的相关性;但是,我希望通过第三个分类变量“分层”相关性:状态 . 我想能够说“x和y的相关系数/ p值是[状态]中的[结果] . ”
我已经尝试了位于dplyr包中的group_by方法,该方法位于cor.test(如下所示)中 . 我需要系数和p值,所以我一直在尝试使用cor.test方法 . 我也试过使用矩阵方法,但也不成功 .
Data<-read.csv("PATHWAYNAME")
library(dplyr)
CCor<-cor.test(Data$x, Data$y,
method=c("pearson"), group_by(State))
CCor
我能够分别为每个状态运行每组值,以获得系数和p值;但是,我确信有一种更有效的方法可以完成这项任务 . 我的数据足够大,单独运行它们将非常繁琐 .
预先感谢您的帮助!
UPDATE: 使用它作为极端截断的样本数据集,但同样代表我自己的变量,我想知道平均收入是否与列出的每个州的访问次数相关;也就是说,平均收入与阿拉巴马州的访问量有正相关或负相关吗?
>State NumVis AvgIncome
>IN 45 60000
>AL 100 56000
>AK 45 80000
>ME 89 54000
>NC 120 100000
>SC 356 43000
>ND 100 25000
>SD 63 20000
>MN 54 46000
>ID 85 55000
使用下面的代码运行此数据时,我的结果如下:
CorrDat<-read.csv("File")
CorrDat %>%
group_by(State) %>%
do(tidy(cor.test(CorrDat$NumVis, CorrDat$Income, method="pearson")))
您是否能够帮助澄清我在使用此代码时做错了什么,或者我是否需要使用替代方法来完成此任务?
2 回答
有几种方法可以在R. _2619983中实现,或者更一般地说
tidyverse
是一组能够达到预期效果的流行工具 . 这些工具的主要区别在于管道%>%
,它提供了一种从左到右而不是从内到外编写代码的方法(或者在环境中创建一堆中间对象) . 虽然管道可以与基地R一起使用,但它的受欢迎程度来自dplyr
.以下是mtcars数据集的几个示例 . 关键功能是
do
和map
,它们非常通用 . 我建议运行?do
和?map
.另一种方式是:
或者更多变量:
cor.test的一个例子:
还有另一种使用purrr :: map的方法:
它给出了一个列表,可以使用相同或另一个map函数进行操作:
提取系数:
更新:回答更新的问题:
问题是如何指定
do
调用 . 这是对的:其中
.
表示前一个管道传递的数据 . 在发布的示例中,结果如下:考虑到每组仅进行1次观察,这是合理的
你做的是:
将整个CorrDat集传递给
do
函数,使其执行与组相同的操作次数 .%>%
管道假定传递的数据将用作以下函数中的第一个参数,如果它不应该将数据称为.
. 您可以执行.$column
或.[,2]
等操作 .使用base r,您可以使用by .
例如,在missuse的帖子中复制其中一个例子: