对数据框中的列进行子集化,以通过迭代创建新的数据框

问题描述 投票:0回答:1

我有一个大型数据框,想要从各个列创建多个新数据框。每个新数据帧应包含前两列原始列以及接下来的一列。

我可以手动完成此操作,我想要的虚拟产品是 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?),它足够灵活,可以通过管道补充到其他函数中。

r dplyr iteration subset
1个回答
0
投票

我强烈建议阅读我的答案:如何制作数据框列表?了解有关使用列表的一些观点。

您可以像这样列出您的结果:

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,我也建议不要执行第一步...我不知道你下一步要做什么,但你很可能不需要首先复制这么多次数据。

© www.soinside.com 2019 - 2024. All rights reserved.