我有一个来自调查的数据框,其中有几种类型的缺失值,这些值在各列之间有所不同。在某些问题中,他们仅使用“97”,而在其他问题中,他们使用“98”、“99”或“99999”等。我想要的是一种快速而简单的方法来检查每列中是否包含缺失的一个值类型并将它们全部设置为 NA。我在这个网站上找到了一个适用于简单列的解决方案,但一定有更有效的方法吗?
这是我的数据集的示例,其中包含两种不同的缺失值类型(98 和 99):
safety_ensured social_trust approval_gov empl_opp gap_rich_poor
<dbl> <dbl> <dbl> <dbl> <dbl>
1 3 98 99 NA 2
2 99 98 99 3 98
3 2 98 99 98 98
4 3 98 99 3 3
5 3 98 99 1 98
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一个使用 dplyr 和函数的解决方案,但是当我这样做时,它会将我的数据框转换为列表。
is_na <- function(x){
return(as.character(x) %in% c("96", "97", "98", "99", "99999"))
}
dataset <- dataset %>%
lapply(is_na)
Run Code Online (Sandbox Code Playgroud)
问候
我们可以创建一个vector值,然后使用mutate/across(从dplyr1.0.0 开始),并替换每列中与everything()'vec' ( %in%)匹配的值( - 选择所有列NA)
library(dplyr)
vec <- c(96:99, 99999)
dataset %>%
mutate(across(everything(), ~ replace(., . %in% vec, NA)))
Run Code Online (Sandbox Code Playgroud)