有谁知道如何删除完全由NA或零组成的列?
例如,给定这样的数据框:
rv X1 X2 X3 X4
1 M 0 110 0 1
2 J 70 200 0 3
3 J NA 115 NA 4
4 M 65 110 0 9
5 J 70 200 NA 3
6 J 64 115 NA 8
Run Code Online (Sandbox Code Playgroud)
我只想要rv,X1,X2和X4列。
有了base R,我们可以做到
Filter(function(x) !all(is.na(x)|x == 0), df)
# rv X1 X2 X4
#1 M 0 110 1
#2 J 70 200 3
#3 J NA 115 4
#4 M 65 110 9
#5 J 70 200 3
#6 J 64 115 8
Run Code Online (Sandbox Code Playgroud)
或使用 colSums
df[!!colSums(replace(df, is.na(df), 0)!= 0)]
Run Code Online (Sandbox Code Playgroud)
或sapply用于创建逻辑向量
df[!sapply(df, function(x) all(is.na(x)|x == 0))]
Run Code Online (Sandbox Code Playgroud)
多种方法来做到这一点
df[colSums(is.na(df) | df == 0) != nrow(df)]
# rv X1 X2 X4
#1 M 0 110 1
#2 J 70 200 3
#3 J NA 115 4
#4 M 65 110 9
#5 J 70 200 3
#6 J 64 115 8
Run Code Online (Sandbox Code Playgroud)
使用 apply
df[!apply(is.na(df) | df == 0, 2, all)]
Run Code Online (Sandbox Code Playgroud)
或使用 dplyr
library(dplyr)
df %>% select_if(~!all(is.na(.) | . == 0))
Run Code Online (Sandbox Code Playgroud)