我有一个大型数据框,想要从各个列创建多个新数据框。每个新数据帧应包含前两列原始列以及接下来的一列。
我可以手动完成此操作,我想要的虚拟产品是 subA、subB 和 subC:
library(tidyverse)
# dummy dataframe
chr1 <- letters[1:4]
chr2 <- letters[23:26]
A <- 1:4
B <- 5:8
C <- 9:12
data <- tibble(chr1, chr2, A, B, C)
# manual subsetting
subA <- data %>%
select(chr1, chr2, A)
subB <- data %>%
select(chr1, chr2, B)
subC <- data %>%
select(chr1, chr2, C)
但是,我的原始数据框有大约 700 列,所以我正在寻找某种简单的迭代,最好是在 tidyverse 中(purrr?),它足够灵活,可以通过管道补充到其他函数中。
我强烈建议阅读我的答案:如何制作数据框列表?了解有关使用列表的一些观点。
您可以像这样列出您的结果:
chr_cols = c("chr1", "chr2")
sub_cols = setdiff(names(data), chr_cols)
result = lapply(sub_cols, \(x) data[c(chr_cols), x)])
names(result) = paste0("sub", chr_cols)
然后,如果您确实想要,可以执行
list2env(result)
将这些子数据帧从 result
列表复制到您的全局环境,但我建议不要这样做。
Franky,我也建议不要执行第一步...我不知道你下一步要做什么,但你很可能不需要首先复制这么多次数据。