【问题标题】:Select rows with non-NA values in at least one of the desired columns在至少一列所需的列中选择具有非 NA 值的行
【发布时间】:2017-10-20 00:02:10
【问题描述】:

我的代码可以正常工作:

CompleteCoxObs<-temp[is.na(temp[,8])== FALSE | is.na(temp[,9])== FALSE | is.na(temp[,10])== FALSE,];

有什么更好、更有效的方法来达到同样的效果?

【问题讨论】:

  • 查看na.omit函数
  • is.na(x) == FALSE 的简写也是!is.na(x)

标签: r na missing-data


【解决方案1】:

你可以试试这个来检查所有的列:

CompleteCox.df <- temp.df[rowSums(is.na(temp.df)) != ncol(temp.df),]

在你的情况下:

CompleteCox.df <- temp.df[rowSums(is.na(temp.df[, c(8,9,10)])) != 3,]

【讨论】:

  • 这是一个非常优雅的解决方案,谢谢!但是,这转化为“至少一列 temp.df 不是 NA”,对吗?我的数据框有 16 列,我只想将其应用于其中 3 列(列 8、9、10),因此我需要稍微修改您的代码。
  • @nasim 现在试试吧。
【解决方案2】:

您可以尝试以下方法之一:

temp[!is.na(rowSums(temp[,8:10])),]

temp[!apply(is.na(temp[,8:10]),1,any),]

temp[na.omit(temp[,8:10]),]

【讨论】:

    【解决方案3】:
    temp[apply(!is.na(temp[,8:10]),1,any),]
    

    注意放置“!”在is.na前面

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2020-05-09
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多