【问题标题】:Remove NA in a data.table in R在 R 中的 data.table 中删除 NA
【发布时间】:2017-06-14 10:12:35
【问题描述】:

我正在尝试在 R 中做一些显然非常简单的事情(抱歉,我是 data.tables 的新手),但我无法找到正确的解决方案。我尝试删除特定列上具有 NA 值的行(“Ground_Tru”。这是我迄今为止的尝试;

all_data <- fread ("all_vbles.txt",header=TRUE, na.strings=c("NA","N/A",""))
na.omit (all_data, cols="Ground_Tru")

我收到消息

75 列的空 data.table(0 行):OID_,IN_FID,Polygon_ID,DIST_highw,DIST_railw,DIST_port...

但是“Ground_Tru”字段有许多 NA 值 提前感谢您的帮助,

【问题讨论】:

  • 如果您使用na.omit,如果其中一列中有任何 NA,则将省略整行。请告诉我们您希望如何进行
  • all_data[!is.na(Ground_Tru)] ?
  • @simone,它应该是all_data[!is.na(Ground_Tru),] 以保留所有非 NA 行。
  • @ParthChaudhary 这是一个data.table,它应该在没有,的情况下工作
  • 据我所知,您的代码应该可以工作。我们可以建议进行一些诊断,以找出为什么它不适用于您的输入数据,但我猜您实际上应该在发布之前创建一个可重现的示例。一些指导:stackoverflow.com/questions/5963269/…

标签: r data.table na missing-data


【解决方案1】:

使用complete.cases:

all_data <- all_data[complete.cases(all_data[, 'Ground_Tru'])]

【讨论】:

    【解决方案2】:

    最后我设法解决了这个问题。显然,R 使用 data.table 库读取列名存在一些问题,因此我遵循了此处提供的建议之一: read.table doesn't read in column names

    所以代码变成了这样:

    library(data.table)
    
    read.table("all_vbles.txt",header=T,nrow=1,sep=",",dec=".",quote="")
    all_data <- fread ("all_vbles.txt",header=FALSE, skip=1, ,sep="auto", na.strings=c("NA","N/A","")) 
    setnames (all_data,header)
    test_data <- na.omit (all_data, "Ground_Tru") 
    

    这似乎工作正常。

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2012-12-31
      • 2013-09-28
      • 2012-09-20
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多