繁体   English   中英

r: replace_na() 不替换 NAs

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM