library(tidyverse)dat <- tibble(
x = c(1,2,NA,4,5),
y = c("a",NA,"c",NA,NA),
z = c("A",NA,NA,"B","C")
)
dat# A tibble: 5 × 3
x y z
<dbl> <chr> <chr>
1 1 a A
2 2 <NA> <NA>
3 NA c <NA>
4 4 <NA> B
5 5 <NA> C
この欠損値を置き換えていきます。
まずは、xを0、yをmiss、zをMISSで置き換えてみます。ひとつ前の動画で学んだListをさっそく使ってみましょう
dat %>%
replace_na(list(x = 0, y = "miss", z = "MISS"))# A tibble: 5 × 3
x y z
<dbl> <chr> <chr>
1 1 a A
2 2 miss MISS
3 0 c MISS
4 4 miss B
5 5 miss C
簡単ですね?
あと実は、ベクトルの置き換えも可能なので、
dat2 <- dat %>%
mutate(x = replace_na(x, 0),
y = replace_na(y,"miss"),
z = replace_na(z,"MISS"))
dat2# A tibble: 5 × 3
x y z
<dbl> <chr> <chr>
1 1 a A
2 2 miss MISS
3 0 c MISS
4 4 miss B
5 5 miss C
長くなりますが、mutateの中で利用することも可能です。
いかがでしょうか?
実は、replace_naの逆を行う関数もありますのでここで一緒に解説しておきます。
dat2 %>%
mutate(y = na_if(y,"miss"))# A tibble: 5 × 3
x y z
<dbl> <chr> <chr>
1 1 a A
2 2 <NA> MISS
3 0 c MISS
4 4 <NA> B
5 5 <NA> C
このように、replace_naと逆の動きをするna_if関数を利用すれば、必要のない値をNAに変換するということも可能です。
na_ifの使い方は、
na_if(列名,NAにしたい値)
でOKです。
以上、NAの置き換えの話題でした。