我正在寻找一种方法来使用R中的purrr :: map()函数套件替换各种列表项中的NAs。看起来它应该是一个简单的任务,但我无法获得它起作用。
以下作品:
vec1 <- c(3,6,7,NaN)
vec1[is.na(vec1)] <- 0
但是当我尝试使用map()为矢量列表执行此操作时,它不起作用:
library(purrr)
vec1 <- c(3,6,7,NaN)
vec2 <- c(2,3,4)
vec3 <- c(1,6,NaN,NaN,1)
veclist <- list(a = vec1,
b = vec2,
c = vec3)
veclistnew <- map(veclist, function(vec){vec[is.na(vec)] <- 0})
思考?我希望输出是原始向量的列表,其中NA被0替换。
答案 0 :(得分:3)
您可以执行以下操作:
na_to_y <- function(x, y){
x[is.na(x)] <- y
x # you need to return the vector after replacement
}
map(veclist, na_to_y, 0)
答案 1 :(得分:2)
您还可以使用coalesce
中的dplyr
:
library(dplyr)
veclistnew <- map(veclist, ~coalesce(., 0))
> veclistnew
$a
[1] 3 6 7 0
$b
[1] 2 3 4
$c
[1] 1 6 0 0 1
答案 2 :(得分:2)
另一个选项是replace
library(purrr)
veclist %>%
map(~replace(., is.nan(.), 0))
#$a
#[1] 3 6 7 0
#$b
#[1] 2 3 4
#$c
#[1] 1 6 0 0 1