【问题标题】:Detecting NA's in a DataFrame [duplicate]在 DataFrame 中检测 NA [重复]
【发布时间】:2018-05-01 06:38:54
【问题描述】:

我在 RStudio 中读取 csv 后,一些列能够检测到空值 (NA),但其他列则不能。 View(df)显示一些带有空格而不是 NA 的列。我该怎么做才能将空值表示为 NA?

# Create example data frame
dat <- data.frame(
  Date = c("04/12/2011", "03/01/2002", "02/07/2002", "01/02/2001", "", ""),
  A = "",
  B = c(NA, 1981, NA, 1981, 1950, 1989)
)

【问题讨论】:

  • 请不要张贴截图。下次当您提出问题时,请为您的数据集创建一个可重现的示例,例如我在帖子中所做的。

标签: r dataframe na


【解决方案1】:

在阅读 csv 本身时,您可以指定用 NA 替换空白单元格

df <-read.csv("data.csv", header=T, na.strings=c("","NA"))

如果空白单元格中有空格,可以指定:

na.strings=c(""," ","NA")

【讨论】:

    【解决方案2】:

    你的意思是有些行没有显示任何日期?

    你可以试试

    df[df == ""] = NA
    

    解释here

    【讨论】:

      【解决方案3】:

      我们可以使用lapplyreplace将“”替换为NA

      # Create example data frame
      dat <- data.frame(
        Date = c("04/12/2011", "03/01/2002", "02/07/2002", "01/02/2001", "", ""),
        A = "",
        B = c(NA, 1981, NA, 1981, 1950, 1989)
      )
      
      dat
      #         Date A    B
      # 1 04/12/2011     NA
      # 2 03/01/2002   1981
      # 3 02/07/2002     NA
      # 4 01/02/2001   1981
      # 5              1950
      # 6              1989
      
      # Replace the "" with NA
      dat[] <- lapply(dat, function(x){
        replace(x, x %in% "", NA)
      })
      
      dat
      #         Date    A    B
      # 1 04/12/2011 <NA>   NA
      # 2 03/01/2002 <NA> 1981
      # 3 02/07/2002 <NA>   NA
      # 4 01/02/2001 <NA> 1981
      # 5       <NA> <NA> 1950
      # 6       <NA> <NA> 1989
      

      【讨论】:

      • 正如其他人所说,您可以在读取 csv 文件时设置缺失值,如果您已经有了数据框,那么您可以使用来自dplyrlibrary(dplyr) 的方便的na_if 命令?na_if 对于您的数据框,类似于; `dat$Date
      • @sorearm 感谢您的提示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2012-08-25
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多