【问题标题】:R: deleting columns where certain percentage of values is missing [duplicate]R:删除缺少特定百分比值的列[重复]
【发布时间】:2015-02-16 21:08:26
【问题描述】:

我正在使用类似于下面摘录的数据框。

sample.df

Obs   Var1 Var2 Var3
A0001 21   21   21
A0002 21   78   321
A0003 32   98   87
A0004 21   12   54
A0005 21   13   45 
A0006 21   87   45
B0007 84   NA   45
B0008 21   NA   98
B0009  2   NA   45
B0010 12   NA   45

我想删除缺少特定百分比变量的列,例如 80%。我尝试了以下代码:

sample.df.cln <- apply(sample.df, 2, function(x) {
  if (sum(is.na(x)) / nrow(x) > 0.8) {
  x <- NULL  
  }
})

但是它返回了以下错误:

Error in if (sum(is.na(x))/nrow(x) > 0.8) { : argument is of length zero

我将不胜感激。我还认为将代码封装在一个函数中是有益的,这样它就可以应用于不同的数据帧。

【问题讨论】:

  • 要记住的一点是,在函数内赋值不会改变函数外的值。因此,当您在函数中执行“x
  • 原子向量没有nrow 的值。您需要使用 (sum(is.na(x))/length(x) 。使用lapply 也会更好,因为apply 函数经常破坏data.frames。您还应该在发布问题之前进行搜索。

标签: r dataframe apply na missing-data


【解决方案1】:
x <- sample.df[ lapply( sample.df, function(x) sum(is.na(x)) / length(x) ) < 0.1 ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2020-10-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多