2017-06-26 2 views
-1

replace_na_if動詞の不一致で、すべての文字/数値/論理/ etc ...列のNAsを同じ値で体系的に置き換えるにはどうすればよいでしょうか?ここで私は今何をしています。Rのreplace_na_ifをハッキングする最善の方法

library(dplyr) 
starwars %>% mutate_if(is.numeric, funs(ifelse(is.na(.), 0, .))) 

あなたはあまりにもtidyr :: replace_naを使用しますが、あります」:

、BEFORE

starwars %>% 
    # islolate the columns for the post 
    select_if(is.numeric) %>% 
    filter(!complete.cases(.)) 

# A tibble: 51 x 3 
    height mass birth_year 
    <int> <dbl>  <dbl> 
1  97 32   NA 
2 180 NA   64 
3 180 110   NA 
4 150 NA   48 
5  NA NA   NA 
6 160 68   NA 
7 191 90   NA 
8 170 NA   91 
9 224 82   NA 
10 206 NA   NA 
# ... with 41 more rows 

starwars %>% 
    # isolate the columns for the post 
    select_if(is.numeric) %>% 
    filter(!complete.cases(.)) %>% 
    replace_na(as.list(
    setNames(rep(0, sum(map_chr(., class) == "numeric")), 
      colnames(.)[map_chr(., class) == "numeric"]))) 

# A tibble: 51 x 3 
    height mass birth_year 
    <int> <dbl>  <dbl> 
1  97 32   0 
2 180  0   64 
3 180 110   0 
4 150  0   48 
5  NA  0   0 
6 160 68   0 
7 191 90   0 
8 170  0   91 
9 224 82   0 
10 206  0   0 
# ... with 41 more rows 

答えて

1

後にはmutate_ififelseはこれを達成するために組み合わせることができますしかし、列のリストとその塗りつぶし値を提供する必要があります:

library(tidyr) 
replace_ls <- starwars %>% 
    select_if(is.numeric) %>% names() %>% 
    sapply(function(x) 0, USE.NAMES=TRUE) %>% 
    as.list() 

replace_na(starwars, replace_ls) 
+0

いや、良い点と同じくらい簡単です。 'mutate_if'アイデアをオプションとして投稿することを意図していました。 btw、あなたは 'purrr'をチェックアウトする必要があります!また、全体の操作のためにパイプに留まることを好むでしょう。 – ericgtaylor

+0

'mutate_if(is.numeric、funs(replace(。、is.na(。)、0)))'も動作します。私はこの解決策またはあなたが十分に "整頓"していると思います。 – ericgtaylor

0

is.naはdata.frameメソッドを持っているので、それは

starwars[is.na(starwars)] <- 0 
+0

右、パイプを壊さないようにしてください。また、これは列クラスの選択的置換を解決しません。 – ericgtaylor

+0

カラムを選択することは、明らかにあなたの投稿から解決された問題です。これをパイプに組み込むことは、読者にとって残された課題です。 –

+0

あなたは私が正しい解決策を持っていることは間違いありません。私はパイプを壊す必要がないよりエレガントなものを探していました。ソリューションはLmWによって提供されます。良いものだった。あなたのソリューションは私が頻繁に行うことですが、列クラスの選択的な置き換えには対応していません。上級者は上向きに動く。 – ericgtaylor

関連する問題