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

zes*_*sla 21 r dplyr tidyr

我试图用0填充我的数据中的所有NA.有没有人知道如何使用tidyr的replace_na做到这一点?从文档中,我们可以轻松地用不同的值替换不同列中的NA.但是如何用一些价值取代所有这些呢?我有很多专栏......

以mtcars数据集为例:

mtcars [sample(1:nrow(mtcars), 4), sample(1:ncol(mtcars), 4)]<- NA
mtcars %>% replace_na( ??? )
Run Code Online (Sandbox Code Playgroud)

Sag*_*gar 46

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

mtcars %>% replace(is.na(.), 0)
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*ald 7

我找到了一种replace_na按要求使用它的方法(因为它是通过微基准测试的最快选择):

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)
Run Code Online (Sandbox Code Playgroud)

要将其应用于您的工作数据框架,请确保mtcars在创建myList对象时将2个实例替换为您为工作数据框架命名的名称。

  • 您还可以使用点来表示数据框并在管道中使用列表。`mtcars %&gt;% Replace_na(setNames(lapply(向量("列表", ncol(.)), 函数(x) x &lt;- 0), 名称(.)))` (2认同)
  • df %&gt;% 变异(跨(一切(),replace_na,0)) (2认同)

And*_*rra 5

library(dplyr)
mydata <- mtcars
mydata[sample(1:nrow(mydata), 4), sample(1:ncol(mydata), 4)]<- NA
mydata %>% mutate_each(funs(replace(., is.na(.), 0)))
Run Code Online (Sandbox Code Playgroud)