为DataFrame中的所有列查找和替换NA值

时间:2017-12-28 17:18:11

标签: r data-analysis na data-cleaning

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)

在上面的示例中,有“空”&#39;值为字符/字符串格式。 我试图用NA来代替&#39; NULL&#39;值。我能够以df$age[which(df$Age=='NULL)]<-NA'的形式将其作为单个列。但我不想为所有列编写此列。

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

3 个答案:

答案 0 :(得分:9)

基础R解决方案

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

答案 1 :(得分:3)

甚至可以用一步替换:

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

答案 2 :(得分:0)

我们可以在所有列中使用dplyrreplace 'NULL'值,然后使用type.convert转换列的类型。目前,所有列都是factor类(假设'年龄/任期'应为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