如何在R中按特定顺序逐个删除列

ou6hu8tu  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(184)

所以,我有一个数据集,需要使用for循环做一些工作。
以下是我的假数据:

#fake data
L <- data.frame(matrix(rnorm(20), nrow=10, ncol=10))
names(L) <- c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9","P10")

现在,我想对整列应用一个函数,并删除列“P1”。然后,再次运行该函数,并删除“P5”,以此类推。
这是拆卸的顺序。

# order of removing column
R < c(P1, P5, P2, P8, P9, P4, P3, P6, P7)

接下来我可以尝试什么?

xfb7svmp

xfb7svmp1#

这取决于您想要的输出,但我会使用lapply,因此每个 Dataframe 子集都保存为列表元素:
R <- c("P1", "P5", "P2", "P8", "P9", "P4", "P3", "P6", "P7") lapply(seq_along(R), function(i) L[-which(names(L) %in% R[1L:i])])

cwdobuhd

cwdobuhd2#

由于列名是连续排序的,因此可以执行以下操作:

i <- c(1,5,2,8,9,4,3,6,7)
lapply(i,function(x) L[,-x])
carvr3hs

carvr3hs3#

使用dplyr::selectpurrr:map,如果修改R以包含最后一列,则可能会执行类似以下操作:

# example data
L <- data.frame(matrix(rnorm(20), nrow=10, ncol=10))
names(L) <- c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9","P10")
R <- c("P1", "P5", "P2", "P8", "P9", "P4", "P3", "P6", "P7", "P10")

res_list <- 1:ncol(L) %>%
  map(~select(L[R], .x:ncol(L)))

L[R]用于将列置换为您希望删除的顺序。结果是您可以迭代的 Dataframe 列表。

相关问题