如何使用 tidyr::replace_na 替换数据框中的所有 NA? [复制]

Posted

技术标签:

【中文标题】如何使用 tidyr::replace_na 替换数据框中的所有 NA? [复制]【英文标题】:How to replace all NA in a dataframe using tidyr::replace_na? [duplicate] 【发布时间】:2018-01-16 12:35:13 【问题描述】:

我正在尝试用 0 填充数据中的所有 NA。有谁知道如何使用 tidyr 的 replace_na 来做到这一点?从文档中,我们可以轻松地将不同列中的 NA 替换为不同的值。但是如何将它们全部替换为一些值呢?我有很多专栏...

以mtcars数据集为例:

mtcars [sample(1:nrow(mtcars), 4), sample(1:ncol(mtcars), 4)]<- NA
mtcars %>% replace_na( ??? )

【问题讨论】:

你想用相同的值替换所有的 NA 吗? mtcars %&gt;% mutate_all(coalesce, 0) 【参考方案1】:

如果 replace_na 不是强制性要求,以下代码将起作用:

mtcars %>% replace(is.na(.), 0)

参考问题:https://***.com/a/45574804/8382207

【讨论】:

谢谢。这样可行。 replace_na 可以吗?只是好奇。 @Sagar【参考方案2】:

我找到了一种方法让它按照要求与replace_na 一起工作(因为它是通过微基准测试最快的选项):

更新dplyr v1.0.0

通过添加dplyr::across 函数,这变得更加容易:

library(dplyr)
library(tidyr)

mtcars %>% 
  mutate(
    across(everything(), ~replace_na(.x, 0))
  )

# Or if you're pipe shy:
mutate(mtcars, across(everything(), ~replace_na(.x, 0)))

就是这样!很简单的东西。

对于dplyr &lt; v1.0.0

library(tidyr)
library(dplyr)

# First, create a list of all column names and set to 0
myList <- setNames(lapply(vector("list", ncol(mtcars)), function(x) x <- 0), names(mtcars))

# Now use that list in tidyr::replace_na 
mtcars %>% replace_na(myList)

要将其应用于您的工作数据框,请务必将mtcars 的两个实例替换为您在创建myList 对象时为您的工作数据框命名的任何名称。

【讨论】:

您也可以使用点来表示数据框并在管道中使用列表。 mtcars %&gt;% replace_na(setNames(lapply(vector("list", ncol(.)), function(x) x &lt;- 0), names(.))) df %>% mutate(cross(everything(), replace_na, 0))【参考方案3】:
library(dplyr)
mydata <- mtcars
mydata[sample(1:nrow(mydata), 4), sample(1:ncol(mydata), 4)]<- NA
mydata %>% mutate_each(funs(replace(., is.na(.), 0)))

【讨论】:

很想听听关于为什么这值得反对的反馈。 您似乎丢失了行名...

以上是关于如何使用 tidyr::replace_na 替换数据框中的所有 NA? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 替换运算符的替换端使用变量?

如何使用 QString replace() 将 '/' 替换为 '\\'?

使用gsub(),如何在替换字符串中引用被替换字符串?

如何使用string.replace替换

使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符

如何使用 jQuery 等待替换