使用for循环在R中动态创建子集



我正试图从一个表中创建不同的子集,每次迭代我都想向上移动一列。到目前为止,我用这个代码实现了这一点,但没有动力:

subset_cor_lag00 <- subset(data_24h, select = c(price_return, sentiment_return, tweet_return))
korr_tab_lag00 <- cor(subset_cor_lag00)
subset_cor_lag01 <- transform(subset_cor_lag00, price_return = lead(price_return))
subset_cor_lag01 <- na.omit(subset_cor_lag01)
korr_tab_lag01 <- cor(subset_cor_lag01)

但现在我试着动态地做这件事,但我被它卡住了。所以也许有人有一个暗示。我真的很感激。我试过这个

for(i in 1:5) {
paste0("subset_cor_lag0", i) <- transform(paste0("subset_cor_lag0", i-1), price_return = lead(price_return))
paste0("subset_cor_lag0", i) <- na.omit(paste0("subset_cor_lag0", i))
paste0("korr_tab_lag0", i) <- cor(paste0("subset_cor_lag0", i))
}

可以使用assign,但通常使用按顺序命名的变量并不好。更好的方法是使用list:

subset_cor_lag = list(subset(data_24h, select = c(price_return, sentiment_return, tweet_return)))
for(i in 2:6) {
temp = transform(subset_cor_lag[[i - 1]], price_return = lead(price_return))
subset_cor_lag[[i]] = na.omit(temp)
}
korr_tab = lapply(subset_cor_lag, cor)

## add names, if desired:
name_vec = paste0("lag", 0:5)
names(subset_cor_lag) = name_vec
names(korr_tab) = name_vec

然后,您可以访问,例如subset_cor_lag[["lag2"]]subset_cor_lag[[3]],这很容易在循环中或使用lapply进行编程。

请参阅我在"如何制作数据帧列表?"中的回答?以获取更多讨论和示例。

最新更新