【问题标题】:Find and replace values by NA for all columns in DataFrame用 NA 查找和替换 DataFrame 中所有列的值
【发布时间】:2018-06-09 05:56:27
【问题描述】:
Age <- c(90,56,51,'NULL',67,'NULL',51)
Sex <- c('Male','Female','NULL','male','NULL','Female','Male')
Tenure <- c(2,'NULL',3,4,3,3,4)
df <- data.frame(Age, Sex, Tenure)

在上面的示例中,有“NULL”值作为字符/字符串格式。 我试图用 NA 代替“NULL”值。我可以将它作为 df$age[which(df$Age=='NULL)]&lt;-NA' 的单个列但是我不想为所有列都写这个。

如何对所有列应用类似的逻辑,以便将df 的所有'NULL' 值转换为NAs?我猜apply 或自定义函数或 for 循环会做到这一点。

【问题讨论】:

标签: r data-analysis na data-cleaning


【解决方案1】:

我们可以在所有列中使用dplyrreplace'NULL' 值,然后用type.convert 转换列的类型。目前,所有列都是factor 类(假设'Age/Tenure' 应该是numeric/integer 类)

library(dplyr)
res <- df %>%
         mutate_all(funs(type.convert(as.character(replace(., .=='NULL', NA)))))
str(res)
#'data.frame':   7 obs. of  3 variables:
#$ Age   : int  90 56 51 NA 67 NA 51
#$ Sex   : Factor w/ 3 levels "Female","male",..: 3 1 NA 2 NA 1 3
#$ Tenure: int  2 NA 3 4 3 3 4

【讨论】:

  • 感谢您的回复。我正在尝试将此逻辑应用于我的较大数据框,该数据框还包含一个作为日期时间类的列,其中包含很少的“NULL”值。但是,我收到一条错误消息 Error in mutate_impl(.data, dots) : Evaluation error: character string is not in a standard unambiguous format.
  • @AshishSahu 假设数据的结构与您展示的示例相似,它应该可以工作。请检查str(df)str(yourlargerdata),看看是否有任何不同的类。
  • 我想通了。我猜,我的 str(myDataFrame) 有几列作为日期时间类,其中包含 NULL 值。因此,在执行 mutate_allreplace 函数时,它会抛出评估错误。为了克服这个问题,我将所有列转换为 .character 格式并稍后进行了估算,这对我有用。
  • @AshishSahu 我猜你有可能不支持的POSIXlt 列。相反,它应该是POSIXct
【解决方案2】:

基础 R 解决方案

replace(df, df =="NULL", NA)

【讨论】:

    【解决方案3】:

    甚至可以使用一步替换:

    df[df=="NULL"] <- NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2016-12-05
      相关资源
      最近更新 更多