使用dplyr将多个值设置为NA

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用dplyr将多个值设置为NA相关的知识,希望对你有一定的参考价值。

我有一个调查的数据框架,其中有几种类型的缺失值,在各列之间有所不同。在一些问题中,他们只使用 "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

我发现 此处 使用dplyr和一个函数的解决方案,但当我这样做时,它将我的数据框架变成了一个列表。

is_na <- function(x){
  return(as.character(x) %in% c("96", "97", "98", "99", "99999")) 
}
dataset <- dataset %>%
  lapply(is_na)

问候

答案

我们可以创建一个 vector 的值,然后用 mutate/across (自 dplyr 1.0.0),并替换各列中的值(everything() - 选择所有列),其中符合'vec' (%in%)至 NA)

library(dplyr)
vec <- c(96:99, 99999)
dataset %>%
   mutate(across(everything(), ~ replace(., . %in% vec, NA)))

以上是关于使用dplyr将多个值设置为NA的主要内容,如果未能解决你的问题,请参考以下文章

R语言dplyr包na_if函数根据条件将数据对象替换为NA值实战

使用 dplyr 按组将 NA 替换为上一个或下一个值

有条件地选择 dplyr 中某些值比例为 NA 的列

R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量将异常离散编码转化为NA值

R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0具体列的NA值替换(replace)为0若干列的NA值替换(replace)为0

使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]