为什么:
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))
按预期工作。
您没有为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
为了解决这个问题,使用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