将NA转换为r中的因子

Jam*_*mes 1 r dataframe na

我想将我的数据帧的一列(并且只有一列)中的所有NA转换为"非PA".该列的类是因子.

过去我成功使用过:

df$column[is.na(df$column)] <- "non-PA"
Run Code Online (Sandbox Code Playgroud)

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

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

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

sco*_*coa 6

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

df$column <- as.character(df$column)
df$column[is.na(df$column)] <- "non-PA"
df$column <- factor(df$column)
Run Code Online (Sandbox Code Playgroud)

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

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

levels(df$column) <- union(levels(df$column), "non_PA")
df$column[is.na(df$column)] <- "non-PA"
Run Code Online (Sandbox Code Playgroud)