R 中带有子集的 cor() 函数
cor() function in R with a subset
我在 R 中有一个包含三列的 table。我想根据一组特定的条件获得前两列与第三列的子集的相关性(值都是数字,我希望它们大于某个数字)。 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)
您可以先对数据进行子集化,然后找到相关性。
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
的值相同。这可能是问题的另一个来源。
您可以使用 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
我在 R 中有一个包含三列的 table。我想根据一组特定的条件获得前两列与第三列的子集的相关性(值都是数字,我希望它们大于某个数字)。 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)
您可以先对数据进行子集化,然后找到相关性。
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
的值相同。这可能是问题的另一个来源。
您可以使用 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