2017-05-11 9 views
0

Rのpurrr :: map()スイートを使用して、さまざまなリスト項目のNAsを置き換える方法を探しています。これは簡単な作業であるようです私はそれを働かせることはできません。purrr関数を使ってNAをis.naに置き換える

次作品:

vec1 <- c(3,6,7,NaN) 
vec1[is.na(vec1)] <- 0 

しかし、私はマップを使用してベクトルのリストのためにこれを行うにしようとすると()、それは動作しません。

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}) 

思考?私は出力を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) 
2

あなたはまたdplyrから​​3210を使用することができます。

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 
1

別のオプションは、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 
です
関連する問題