【问题标题】:Print line for NA value in dataframe in RR中数据框中NA值的打印行
【发布时间】:2021-12-13 09:40:29
【问题描述】:

我希望函数检查 count 的值是否 = NA 然后它会打印出说“无效”的行,否则它会说“成功”

order = data.frame(item = c("A","B","C"), count = c(1,2,NA))

check <- function(order){
  if (order$count[is.na(order$count),] ){
    print(paste(order$item,"not value"))
  }
  else {
    print("success")
  }
}

但它会产生错误

【问题讨论】:

    标签: r dataframe na


    【解决方案1】:

    我认为你可以像这样缩短整个函数:

    # define function:
    
    check <- function(x) { 
      ifelse(is.na(x), "not value", "success")
    }
    
    # input function:
    
    check(order$count)
    [1] "success"   "success"   "not value"
    

    【讨论】:

      【解决方案2】:

      你可以试试这个方法

      check <- function(order){
        if (any(is.na(order$count)) ){
          print(paste(order$item[is.na(order$count)],"not value"))
        }
        else {
          print("success")
        }
      }
      check(order)
      
      [1] "C not value"
      

      错误Error in order$count[is.na(order$count), ] : incorrect number of dimensions的原因是order$count是向量但是你调用[is.na(order$count), ]

      另外,order$count[is.na(order$count)]NA,不适合作为if 语句的条件输入。

      如果你想逐行检查items,你可以试试

      check <- function(order){
        for (i in 1:nrow(order)){
          if (is.na(order$count[i])) {
            print(paste(order$item[i], "not value"))
          } else {
            print(paste(order$item[i], "success"))
          }
        }
      }
      check(order)  
      
      [1] "A success"
      [1] "B success"
      [1] "C not value"
      

      【讨论】:

      • 我得到了我想要的结果。谢谢
      【解决方案3】:

      这是另一种方法:

      library(car)
      recode(is.na(order$count), "FALSE='success'; TRUE='not valid'")
      
      [1] "success"   "success"   "not valid"
      

      【讨论】:

        猜你喜欢
        • 2013-10-31
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多