所以,我有一个数据集,需要使用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)
请帮帮我,谢谢。
答案 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::select
和purrr: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]
用于将列置换为您希望删除的顺序。结果是您可以迭代的数据帧列表。