web-dev-qa-db-ja.com

list()を使用せずにdplyrでNAをゼロに置き換えます

Dplyrでは、次のコードを使用してNAを0に置き換えることができます。問題は、データフレームにリストを挿入することです。これにより、さらに分析が失敗します。現時点では、リストやアトミックベクトルなど、どれも理解できません。特定の列を選択し、すべてのNAをゼロに置き換えたいだけです。列の整数ステータスを維持します。

library(dplyr)
df <- tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, NULL, 10:20))
df
df %>% replace_na(list(x = 0, y = "unknown"))

これは機能しますが、列をリストに変換します。列をリストに変換せずにそれを行うにはどうすればよいですか?

そして、これがベースRでそれを行う方法です。しかし、これをmutateステートメントに組み込む方法がわかりません:

df$x[is.na(df$x)] <- 0
8
stackinator

dplyrのどのバージョンを使用していますか?古いものかもしれません。 replace_na関数はtidyrにあるようです。これは機能します

library(tidyr)
df <- tibble::tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, NULL, 10:20))
df %>% replace_na(list(x = 0, y = "unknown")) %>% str()
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3 obs. of  3 variables:
#  $ x: num  1 2 0
#  $ y: chr  "a" "unknown" "b"
#  $ z:List of 3
#   ..$ : int  1 2 3 4 5
#   ..$ : NULL
#   ..$ : int  10 11 12 13 14 15 16 17 18 19 ...

NA値が置き換えられ、列xおよびyが依然としてアトミックベクトルであることがわかります。 tidyr_0.7.2でテスト済み。

11
MrFlick
dt  <- mutate(dt, x = ifelse(is.na(x), 0, x))
24
NT_

データフレームのすべてのNAを置き換えるには

df %>% replace(is.na(.), 0)

0
Oliver Oliver