【发布时间】:2016-12-31 18:42:27
【问题描述】:
我想用有效值替换因子列中的<NA> 值。但我找不到办法。此示例仅用于演示。原始数据来自我必须处理的一个外部 csv 文件。
df <- data.frame(a=sample(0:10, size=10, replace=TRUE),
b=sample(20:30, size=10, replace=TRUE))
df[df$a==0,'a'] <- NA
df$a <- as.factor(df$a)
可能是这样的
a b
1 1 29
2 2 23
3 3 23
4 3 22
5 4 28
6 <NA> 24
7 2 21
8 4 25
9 <NA> 29
10 3 24
现在我想用数字替换 <NA> 值。
df[is.na(df$a), 'a'] <- 88
In `[<-.factor`(`*tmp*`, iseq, value = c(88, 88)) :
invalid factor level, NA generated
我想我错过了关于因子的基本 R 概念。我是吗?
我不明白为什么它不起作用。我认为invalid factor level 意味着88 不是该因素的有效水平,对吧?所以我必须告诉因子列还有另一个层次?
【问题讨论】:
-
我不明白为什么你有这行代码,df$a
-
@buhtz:如果在
data.frame调用中没有对0的值进行采样,将无法复制您的问题,也许更好的是set.seed()。 -
@000andy8484 感谢您的提示。下次我会把它钉在我的笔记上。
-
@user1945827 这只是为了模仿我的真实数据(来自外国csv文件的commin)和真实情况,并提供一个最小的例子。
-
我建议这个因素是一个红鲱鱼。当您使用 read.csv() 函数导入数据时,您需要设置 stringsAsFactors=F,这将删除结果 data.frame 中的任何因素。