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

时间:2018-02-07 22:26:17

标签: r for-loop dataframe

所以,我有一个数据集,需要使用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")

现在,我想将一个函数应用于整个列并删除列&#34; P1&#34;。然后,再次运行该功能并删除&#34; P5&#34;等等。

以下是删除顺序。

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

请帮帮我,谢谢。

3 个答案:

答案 0 :(得分:2)

这取决于你想要的输出,但我会使用lapply所以每个数据帧子集都保存为列表元素:

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])])

答案 1 :(得分:0)

由于您的列名是连续排序的,因此您可以这样做:

Exception in thread "main" java.lang.NullPointerException
    at com.sun.jna.Native.getBytes(Native.java:604)
    at com.sun.jna.Native.toByteArray(Native.java:627)
    at com.sun.jna.Native.toByteArray(Native.java:620)
    at org.freedesktop.libudev.jna.StringUtil.asPointer(StringUtil.java:14)
    at org.freedesktop.libudev.Monitor.addMatchSubsystemDevtype(Monitor.java:116)
    at Example.main(Example.java:14)

答案 2 :(得分:0)

使用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]用于将列置换为您希望删除的顺序。结果是您可以迭代的数据帧列表。