Remove 0 columns from a data frame in R
我看到之前曾有人问过这个问题,但是在我的情况下,他们提供的解决方案给出了一些奇怪的结果。
我的数据帧
1 2 3 4 | Department1 Department2 Department3 Cafeteria Lobby(TT) Lobby(Music Band) James 0 1 0 0 0 0 Flynn 0 1 0 0 0 0 Liam 0 1 0 0 0 0 |
我想要的结果是
1 2 3 4 | Department2 James 1 Flynn 1 Liam 1 |
我用于删除零列的代码是
1 | df <- df[, colSums(df != 0) > 0] |
以上代码已被该
采用
https://stackoverflow.com/a/21530306/7857035
结果为
1 2 3 | 1 1 2 1 3 1 |
以上代码在包含不为零的不同值的一列以上时起作用。在这种情况下如何获得期望的结果?
我已经习惯于使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | library(tibble) library(dplyr) library(purrr) df <- read.table(text =" name Department1 Department2 Department3 Cafeteria lobby_TT lobby_music James 0 1 0 0 0 0 Flynn 0 1 0 0 0 0 Liam 0 1 0 0 0 0", header = TRUE, stringsAsFactor = FALSE) df %>% column_to_rownames("name") %>% keep(~all(.x) != 0) # Department2 # James 1 # Flynn 1 # Liam 1 |
您的问题的立即解决是在设置数据帧时使用
1 | df <- df[, colSums(df != 0) > 0, drop=FALSE] |
这将告诉R不要将数据帧强制降低到最低维度,在这种情况下,这是一个数字矢量。正如您似乎已经注意到的,如果您有多个非零和列,那么强制将不是问题。
演示