繁体   English   中英

R中带有子集的cor()函数

[英]cor() function in R with a subset

我在R中有一个包含三列的表。 我想根据一组特定条件(值都是数字,我希望它们>一定数)来获得前两列与第三列的子集的相关性。 cor()函数似乎没有用于定义此类子集的参数。

我知道我可以使用summary(lm())函数并对r ^ 2求平方根,但是问题是我在for循环中执行此操作,只是将相关性附加到我拥有的单独列表中。 我真的不能轻易将回归摘要的一部分附加到列表中。

这是我正在尝试做的事情:

for (i in x) {list[i] = cor(data$column_a, data$column_b, subset = data$column_c > i)}

显然,我不能这样做,因为cor()函数不适用于子集。

(注意:x = seq(1,100)和list = NULL)

您可以使用lapply无循环操作。 这是一些代码,将在一个列中输出月份范围,而在另一列中输出相关性的数据帧。 do.call(rbind...业务只是从lapply获取列表输出,然后将其转换为数据帧。

corrs = do.call(rbind, lapply(min(airquality$Month):max(airquality$Month), 
                              function(x) {
          data.frame(month_range=paste0(x," - ", max(airquality$Month)), 
             correlation = cor(airquality$Temp[airquality$Month >= x & airquality$Temp < 80],
                               airquality$Wind[airquality$Month >= x & airquality$Temp < 80]))
          }))

corrs 
  month_range correlation
1       5 - 9  -0.3519351
2       6 - 9  -0.2778532
3       7 - 9  -0.3291274
4       8 - 9  -0.3395647
5       9 - 9  -0.3823090

您可以先对数据进行子集,然后找到相关性。

a <- subset(airquality, Temp < 80 & Month > 7)
cor(a$Temp, a$Wind)

编辑:我真的不知道您的list变量是什么,但这是一个基于i动态更改子集的示例(请参阅每月要求如何随每次迭代更改)

list <- seq(1, 5)

for (i in 1:5){

  a <- subset(airquality, Temp < 80 & Month > i)
  list[i] <- cor(a$Temp, a$Wind)

}

根据您单独提供的伪代码,这应该可以工作:

for (i in x) {
    df <- subset(data, column_c > i)
    list[i] = cor(df$column_a, df$column_b)
}

但是,我不知道为什么要让list[i]索引与用于column_c子集的值相同。 那可能是问题的另一个来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM