将NA替换为默认值

时间:2017-11-05 01:25:44

标签: r na

我的一个变量是关于Garbage Disposal的类型。这是R中字段的摘要。

  summary(train$GarageType)

 2Types  Attchd Basment BuiltIn CarPort  Detchd    NA's 
      6     870      19      88       9     387      81

现在,我知道无论NA在哪里,都没有Garbage Disposal。因此,我需要设置一个像' null' ''

如何给火车$ GarageType< - ' null'当火车$ garbage = NA>

Expected OutPut will be like
      summary(train$GarageType)

     2Types  Attchd Basment BuiltIn CarPort  Detchd    NULL
          6     870      19      88       9     387      81

这样Null是一种有效的类型。

我得到的最近的解决方案是

> x<-train
> x$GarageType <- factor(ifelse( is.na(x$GarageType), "NULL", x$GarageType))
> summary(x$GarageType)
   1    2    3    4    5    6 **NULL** 
   6  870   19   88    9  387   81 
> summary(train$GarageType)
 2Types  Attchd Basment BuiltIn CarPort  Detchd    **NA's** 
      6     870      19      88       9     387      81 

现在,我可以用NULL重命名NA,但是像2Types,Attchd等其他人变成1,2等。

3 个答案:

答案 0 :(得分:0)

如果我正确阅读了您的问题,您需要使用ifelse()。有两种方法可以做到这一点。

#Creating a simple reproducible example:
x <- dplyr::tibble(GarageType = c(1:20, rep(NA,20))

#Changing the column directly

x$GarageType <- ifelse(is.na(x$GarageType)==TRUE, "NULL", x$GarageType)

#Creating a new dataframe with a column (needs tidyverse)

x <- x %>% mutate(GarageType = ifelse(is.na(GarageType) == TRUE, "NULL", GarageType))

答案 1 :(得分:0)

如果你想只替换1个变量的NA,那么我们可以在数据框中添加一个新列,对其应用函数并替换旧的列/变量

  

df $ newcol&lt; - NA

然后使用for循环和if else条件

  

for(i in 1 to nrow(df)){
    If(is.na(df[i,oldcol])){ 
    Df[i,newcol]<-"null" 
    }else{ 
    Df[i,newcol]<- df[i,oldcol] 
    } 
    Next
}

然后将此新var值分配给旧var

  

Df $ oldcol&lt; - df $ newcol

答案 2 :(得分:0)

我发现了同样的问题和答案, https://datascience.stackexchange.com/users/41522/salb

我试过了,我得到了预期的结果。

> df <- train 
> levels <- levels(df$GarageType)
> summary(levels)
   Length     Class      Mode 
        6 character character 
> levels
[1] "2Types"  "Attchd"  "Basment" "BuiltIn" "CarPort" "Detchd" 
> levels[length(levels) + 1] <- "None"
> df$GarageType <- factor(df$GarageType, levels = levels)
> summary(df$GarageType)
 2Types  Attchd Basment BuiltIn CarPort  Detchd    None    NA's 
      6     870      19      88       9     387       0      81 
> df$GarageType[is.na(df$GarageType)] <- "None"
**> summary(df$GarageType)
 2Types  Attchd Basment BuiltIn CarPort  Detchd    None 
      6     870      19      88       9     387      81**