将NA转换为r中的因子

时间:2016-02-12 23:13:55

标签: r dataframe na

我想将我的数据框的一列(并且只有一列)中的所有NA转换为“非PA”。该列的类是因子。

过去我成功使用过:

df$column[is.na(df$column)] <- "non-PA"

但由于某些原因,这次我收到此错误消息:

In `[<-.factor`(`*tmp*`, is.na(management.points$management),
 value = c(NA, : invalid factor level, NA generated

我已经尝试将列转换为字符以及其他各种方法,但我仍然得到相同的错误消息。我做错了什么?

1 个答案:

答案 0 :(得分:6)

您必须先将列转换为字符向量:

df$column <- as.character(df$column)
df$column[is.na(df$column)] <- "non-PA"
df$column <- factor(df$column)

发生错误是因为如果某个值不是该因素的某个级别,则无法在该因子中输入该值。

一个潜在的缺点(来自@ docendo的评论)是这可能会删除未使用的因子水平。为了保留它们,您只需将“non_PA”添加到级别而不是转换为字符:

levels(df$column) <- union(levels(df$column), "non_PA")
df$column[is.na(df$column)] <- "non-PA"