【问题标题】:Remove columns from dataframe where ALL values are NA, NULL or empty [duplicate]从数据框中删除所有值为 NA、NULL 或空的列 [重复]
【发布时间】:2017-06-13 03:39:35
【问题描述】:

我有一个数据框,其中一些值为 NULL 或 Empty。我想删除这些所有值NULL . 应从数据框中删除列,不要仅隐藏。

我的头(df)看起来像数据=

  VAR1  VAR2  VAR3   VAR4  VAR5  VAR6  VAR7
1  2R+          52   1.05     0     0    30
2  2R+         169   1.02     0     0    40
3  2R+          83     NA     0     0    40
4  2R+          98   1.16     0     0    40
5  2R+         154   1.11     0     0    40
6  2R+         111     NA     0     0    15

dataframe包含200多个变量,变量为空且零值不连续出现。

我试图估计平均 Col 并选择列为 Null 或空,类似于删除“NA”(请参阅​​here),但它不起作用。

df <- df[,colSums(is.na(df))<nrow(df)]

我收到一个错误:'x' 必须是一个至少包含两个维度的数组

谁能帮帮我?谢谢!

【问题讨论】:

  • 请提供使用dput(head(myDf, 20))的可重现示例。
  • 要删除全为 0 的列吗?
  • 是的,我想删除所有值为 NA、NULL 或空的所有列

标签: r dataframe


【解决方案1】:

我们可以使用Filter

Filter(function(x) !(all(x=="")), df)
#   Var1 Var3
#1  2R+   52
#2  2R+  169
#3  2R+   83
#4  2R+   98
#5  2R+   NA
#6  2R+  111
#7  2R+   94
#8  2R+  116
#9  2R+   86

注意:如果特定列的所有元素都是 NA,它也应该工作

df$Var3 <- NA
Filter(function(x) !(all(x=="")), df)
#   Var1
#1  2R+
#2  2R+
#3  2R+
#4  2R+
#5  2R+
#6  2R+
#7  2R+
#8  2R+
#9  2R+

更新

基于更新后的数据集,如果我们需要删除只有0值的列,那么将代码改为

Filter(function(x) !(all(x==""|x==0)), df2)
#    VAR1 VAR3 VAR4 VAR7
#1  2R+   52 1.05   30
#2  2R+  169 1.02   40
#3  2R+   83   NA   40
#4  2R+   98 1.16   40
#5  2R+  154 1.11   40
#6  2R+  111   NA   15

数据

df2 <- structure(list(VAR1 = c("2R+", "2R+", "2R+", "2R+", "2R+", "2R+"
), VAR2 = c("", "", "", "", "", ""), VAR3 = c(52L, 169L, 83L, 
98L, 154L, 111L), VAR4 = c(1.05, 1.02, NA, 1.16, 1.11, NA), VAR5 = c(0L, 
0L, 0L, 0L, 0L, 0L), VAR6 = c(0L, 0L, 0L, 0L, 0L, 0L), VAR7 = c(30L, 
40L, 40L, 40L, 40L, 15L)), .Names = c("VAR1", "VAR2", "VAR3", 
"VAR4", "VAR5", "VAR6", "VAR7"), row.names = c("1", "2", "3", 
"4", "5", "6"), class = "data.frame")

【讨论】:

  • 好的!我已经完成了! ;)
猜你喜欢
  • 2011-02-08
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多