为什么用 mutate 替换_na 不能按预期工作?

问题描述 投票:0回答:2

为什么:

data.frame(a=c(TRUE,NA)) %>% mutate(a=replace_na(FALSE))

退货

      a
1 FALSE
2 FALSE

因此将整个列设置为该值,而不仅仅是 NA 元素?

在这种情况下,

mutate
应该称为
replace_na
的“向量”版本,也就是说,它应该相当于:

> df <- data.frame(a=c(TRUE,NA))
> df$a <- replace_na(df$a, FALSE)

replace_na(data, replace)
的文档说:

如果数据是向量,则替换采用单个值。该单个值替换向量中的所有缺失值。替换将被转换为数据类型。

附注,与此问题无关,

data.frame(a=c(TRUE,NA)) %>% replace_na(list("a"=FALSE))

按预期工作。

r tidyverse missing-data mutate
2个回答
0
投票

您没有为replace_na()函数提供要操作的列,从而滥用了mutate()。运行replace_na(FALSE) simple会返回FALSE,这解释了你的结果。表示中的第三行代码给出了您想要的结果。

library(tidyverse)
data.frame(a=c(TRUE,NA)) %>% mutate(a= replace_na(FALSE))
#>       a
#> 1 FALSE
#> 2 FALSE

replace_na(FALSE)
#> [1] FALSE

data.frame(a=c(TRUE,NA)) %>% mutate(a= replace_na(a,FALSE))
#>       a
#> 1  TRUE
#> 2 FALSE

创建于 2024 年 11 月 13 日,使用 reprex v2.1.1


0
投票

为了解决这个问题,使用replace_na示例:

library(tidyr)
library(dplyr)

data.frame(a=c(TRUE,NA)) %>%
  mutate(a=replace_na(a,
                      FALSE)
         )

根据replace_na文档,https://tidyr.tidyverse.org/reference/replace_na.html。应该是

replace_na(data, replace, ...)

在你的原始代码中: Replace_na(FALSE) 结果为 FALSE

但是,您想要的答案是将 df$a na 替换为 FALSE,因此正确的模式应该是:

replace_na(df$a, FALSE).

在 dplyr mutate 函数和 %>% 管道模式下,df$a 可以写成 a。整洁的 dplyr 方式是:

mutate(a=replace_na(a,FALSE))

如果您喜欢我的回答,请投票。

谢谢你。

WY

© www.soinside.com 2019 - 2024. All rights reserved.