[英]r: replace_na() not replacing NAs
我有一个名为df$salesContribution
NA 变量。
使用dplyr
我在下面创建了一个语句,但无法弄清楚为什么我的df$salesContribution
仍然返回df$salesContribution
:
df<- df %>%
mutate(salesContribution = as.numeric(salesContribution)) %>%
replace_na(0)
0
没有注册吗?
如果变量是一个因子,并且替换还不是您的因子的水平,则 replace_na() 将不起作用。 如果这是问题,您可以在运行 replace_na() 之前为因子变量添加另一个级别为 0,或者您可以先将变量转换为数字或字符。
看起来你想要
df$salesContribution <- df$salesContribution %>% as.numeric() %>% replace_na(0)
我在别处找到了一篇博客回复,其中 Hadley 本人说他们希望从 replace_na 转向更接近 SQL 的命令 coalesce()。 解决方案涉及交叉和合并。 就我而言,我使用了数据帧中的不同变量来临时提供缺失值。 您还可以指定一个固定值。
这是我刚刚在工作中所做的一个例子:
变量名1 | 变量名2 | |
---|---|---|
1 | 是的 | 是的 |
2 | 不适用 | 不 |
3 | 不适用 | 是的 |
4 | 不 | 不 |
df %>%
mutate(across(Varname1, coalesce, Varname2))
变量名1 | 变量名2 | |
---|---|---|
1 | 是的 | 是的 |
2 | 不 | 不 |
3 | 是的 | 是的 |
4 | 不 | 不 |
我没有足够的声望点来为某人的答案添加评论,但上面说:
如果变量是一个因子,replace_na() 将不起作用,并且替换不是>已经是你的因子的水平。 如果这是问题所在,您可以在运行 replace_na() 之前将另一个级别添加到 > 您的因子变量为 0,或者您可以先将 > 变量转换为数字或字符。
这是真的。 但是,您可以使用 forcats 包中的fct_explicit_na()
解决此问题。
您可以使用 base replace
:
df<- df %>%
mutate(salesContribution = replace(as.numeric(salesContribution), which(is.na(salesContribution)), 0)
如果使用data.table
包,您可以执行以下操作:您可以尝试以下操作: x[is.na(field_name)][, field_name := replacement_value]
data.frame 也应该有类似的语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.