這個問題在這里已經有了答案: 使用 ifelse 和 is.na 進行變異 (4 個回答) 2 小時前關閉。
社區正在審查是否在1 小時前重新打開此問題。
我想na_if在 tibble 中列出我想使用dplyr 包中的函式轉換為缺失的所有事件,但我似乎沒有做對。任何線索?
library(dplyr)
set.seed(123)
df <- tibble(
a1 = c("one", "three", "97", "twenty", "98"),
a2 = c("R", "Python", "99", "Java", "97"),
a3 = c("statistics", "Data", "Programming", "99", "Science"),
a4 = floor(rnorm(5, 80, 2))
)
#--- The long route
df1 <- df %>%
mutate(across(where(is.character), ~na_if(., "97")),
across(where(is.character), ~na_if(., "98")),
across(where(is.character), ~na_if(., "99")))
#---- Trial
df2 <- df %>%
mutate(across(where(is.character),
~na_if(., c("97", "98", "99"))))
uj5u.com熱心網友回復:
您可以使用:
df %>%
mutate(
across(
where(is.character),
~if_else(. %in% c("97", "98", "99"), NA_character_, .)
)
)
# A tibble: 5 × 4
a1 a2 a3 a4
<chr> <chr> <chr> <dbl>
1 one R statistics 80
2 three Python Data 80
3 NA NA Programming 76
4 twenty Java NA 83
5 NA NA Science 78
在na_if這里不起作用的原因是因為~na_if(., c("97", "98", "99"))基本上等同于if_else(. == c("97", "98", "99"), NA_character_, .). 換句話說,它只以成對的方式比較向量。你可以看到為什么這是一個問題:
> if_else(df$a1 == c("97", "98", "99"), NA_character_, df$a1)
[1] "one" "three" "97" "twenty" NA
Warning message:
In df$a1 == c("97", "98", "99") :
longer object length is not a multiple of shorter object length
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/347570.html
下一篇:在R中創建資料透視表
