如何使用 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 %>% 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 < 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 %>% replace_na(setNames(lapply(vector("list", ncol(.)), function(x) x <- 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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 QString replace() 将 '/' 替换为 '\\'?