2017-06-23 1 views
3

tibbleの特定の列のNA値を置き換えようとしています。列はすべて同じ接頭辞で始まるので、dplyrパッケージのstarts_with()ファンクションを使用する簡潔な方法があるかどうかを知りたいと思っています。starts_with()を使用してNAを0に置き換えます。

私はSOに関するいくつかの他の質問を見ましたが、すべて特定の列名または場所を使用する必要があります。私は本当に怠惰で、すべての列を定義したくない、プレフィックスだけを考えています。

tidyrパッケージのreplace_na()機能を無効にしようとしました。私が持っているコードは、割り当てに間違っていることが分かっていますが、私の語彙は見た目を知るのに十分ではありません。

Reprex:

library(tidyverse) 

tbl1 <- tibble(
id = c(1, 2, 3), 
num_a = c(1, NA, 4), 
num_b = c(NA, 99, 100), 
col_c = c("d", "e", NA) 
) 

replace_na(tbl1, list(starts_with("num_") = 0))) 

答えて

2

方法if_else(またはcase_when)でmutate_atを使用してはどうですか?あなたは0

mutate_at(tbl1, vars(starts_with("num_")), 
      funs(if_else(is.na(.), 0, .))) 

# A tibble: 3 x 4 
    id num_a num_b col_c 
    <dbl> <dbl> <dbl> <chr> 
1  1  1  0  d 
2  2  0 99  e 
3  3  4 100 <NA> 

starts_withおよびその他の選択ヘルパーがマッチした変数の位置を与える整数ベクトルを返すことに注意して興味の列内のすべてのNAを交換したい場合、これは動作します。私はいつもそれらを使用する方法以外の状況でそれらを使用しようとすると、これを覚えておく必要があります..

関連する問題