将缺失值(字符)转换为默认值的函数

时间:2016-04-19 14:11:15

标签: r

以下功能有效。它将缺失值转换为某个默认值

convertNAsToDefault <- function(df, column, default) {
  df[[column]] <- as.character(df[[column]])
  df[is.na(df[[column]]), column] <- default
  df[[column]] <- as.factor(df[[column]])
  return (df)
}

这是它的使用方法。

owners <- c('Becky', 'Alex', 'Jessica', 'Norm')
pets <- c('cat', 'dog', NA, 'dog')
d <- data.frame(owners, pets)
glimpse(d)

# Before: Jessica <NA>
convertNAsToDefault(d, 'pets', 'unknown')
# After:  Jessica unknown

我想知道是否有办法更优雅地编写convertNAsToDefault()函数或使用现有的包来执行此操作。

2 个答案:

答案 0 :(得分:1)

您的函数不仅会将缺失值转换为默认值,还会将数据框的列转换为因子变量。

为了简单地删除缺失值,您不需要函数只需使用逻辑向量:

d[is.na(d)] <- "unknown"

当然,如果&#34; d $ pets&#34;已经是一个因子变量,你首先必须定义一个新的水平&#34; unknown&#34;

levels(d$pets) = c(levels(d$pets), "unknown")

答案 1 :(得分:0)

您也可以使用ifelse函数代替某些数据集df和变量x:

as.factor(ifelse(is.na(df$x), "unknown", as.character(x)))

要浏览多个变量,您可以使用sapply:

newdf <- data.frame(sapply(df, function(x) as.character(ifelse(is.na(df$x), 
                                                        "unknown", as.character(x)))))