inNA
を介して値をゼロに置き換えたいと思います。構文は以下のとおりです。mutate_if
dplyr
set.seed(1)
mtcars[sample(1:dim(mtcars)[1], 5),
sample(1:dim(mtcars)[2], 5)] <- NA
require(dplyr)
mtcars %>%
mutate_if(is.na,0)
mtcars %>%
mutate_if(is.na, funs(. = 0))
エラーを返します:
エラー
vapply(tbl, p, logical(1), ...)
: 値の長さは 1 である必要がありますが、FUN(X[[1]])
結果の長さは 32 です
この操作の正しい構文は何ですか?
ベストアンサー1
このトリックは、purrrチュートリアル、これは dplyr でも動作します。この問題を解決するには 2 つの方法があります。
まず、パイプの外側でカスタム関数を定義し、それを で使用しますmutate_if()
。
any_column_NA <- function(x){
any(is.na(x))
}
replace_NA_0 <- function(x){
if_else(is.na(x),0,x)
}
mtcars %>% mutate_if(any_column_NA,replace_NA_0)
次に、、またはの組み合わせを使用します~
。(は に置き換えることができますが、他の文字や記号に置き換えることはできません)。.
.x
.x
.
mtcars %>% mutate_if(~ any(is.na(.x)),~ if_else(is.na(.x),0,.x))
#This also works
mtcars %>% mutate_if(~ any(is.na(.)),~ if_else(is.na(.),0,.))
あなたの場合は、以下も使用できますmutate_all()
:
mtcars %>% mutate_all(~ if_else(is.na(.x),0,.x))
を使用すると~
、匿名関数を定義できます。一方、.x
または は.
変数を表します。のmutate_if()
場合、.
または は.x
各列です。