以下功能有效。它将缺失值转换为某个默认值
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()函数或使用现有的包来执行此操作。
答案 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)))))