您可以转换为字符、替换和转换回因子,例如像这样:
df <- data.frame(x = as.factor(c(1, 2, NA, 3)), y = as.factor(c(NA, NA, 4, 5)), z=c(1,0,2,NA) )
isf <- sapply(df, is.factor) # check which columns are factors
df[, isf] <- lapply(df[, isf], function(.){
. <- as.character(.) # convert to character
.[is.na(.)] <- "None" # replace NA by "none"
factor(.) # return a factor
})
工作部分的较短版本:
df[, isf] <- lapply(df[, isf], function(.)
factor(replace(as.character(.), is.na(.), "None"))
)
另一种策略(也许更优雅)是首先将“无”添加到每个因素的水平,然后将NA 替换为"None":
df <- data.frame(x = as.factor(c(1, 2, NA, 3)), y = as.factor(c(NA, NA, 4, 5)), z=c(1,0,2,NA) )
isf <- sapply(df, is.factor) # check which columns are factors
df[, isf] <- lapply(df[, isf], function(.){
levels(.) <- c(levels(.), "None")
replace(., is.na(.), "None")
})