【问题标题】:Replacing multiple columns with NA Factor Levels with "None"用“无”替换具有 NA 因子水平的多列
【发布时间】:2017-12-07 05:12:53
【问题描述】:

我正在使用数据集 House Price: Advanced Regression Techniques,其中包括多个因子变量,其级别中有 NA。考虑 PoolQL、Alley 和 MiscFeatures 列。我想在一个函数中用None 替换所有这些NA,但我没有这样做。到目前为止尝试过:

MissingLevels <- function(x){
  for(i in names(x)){
  levels <- levels(x[i])
  levels[length(levels) + 1] <- 'None'
  x[i] <- factor(x[i], levels = levels)
  x[i][is.na(x[i])] <- 'None'
  return(x)
  }
}

MissingLevels(df[,c('Alley', 'Fence')])

apply(df[,c('Alley', 'Fence')], 2, MissingLevels)

https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data

【问题讨论】:

    标签: r function dataframe na levels


    【解决方案1】:

    有几种方法,例如:

    x <- data.frame(another = 1:3, Alley = c("A", "B", NA), Fence = c("C", NA, NA))
    

    选项 1:使用forcats

    x[,c("Alley", "Fence")] <- lapply(x[,c("Alley", "Fence")], fct_explicit_na, na_level = "None")
    
      another Alley Fence
    1       1     A     C
    2       2     B  None
    3       3  None  None
    

    选项 2:

    x[,c("Alley", "Fence")] <- lapply(x[,c("Alley", "Fence")], function(x){`levels<-`(addNA(x), c(levels(x), "None"))})
    

    PS:第二个答案的灵感来自@G。格洛腾迪克发帖replace <NA> in a factor column in R

    【讨论】:

    • 甜蜜!非常简洁的功能。我喜欢。对我来说,这非常有效:apply(df[,c("Alley", "Fence")], 2, fct_explicit_na, na_level = "None")。
    • 为什么要使用 sapplyapply(df, 2... 并将 data.frame 强制转换为矩阵? lapply 与覆盖原始 x 结合使用会更合适
    • 我认为你是对的@thelatemail。 lapply 保留类因子,而 apply 将变量更改为字符。
    • 真@thelatemail。谢谢 。已编辑。
    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2015-01-27
    • 2016-12-31
    相关资源
    最近更新 更多