library(tidyverse)それではfill関数の動作、確認していきましょう。
とはいってもスライドで解説したとおり、
dat <- tibble(
dai = c("A",NA,NA,NA,NA,NA,NA,NA,NA),
tyu = c("1",NA,NA,"2",NA,NA,NA,NA,NA),
syo = c("a","b","c","a","b","c","d","e","f"),
nam = c("い","ろ","は","に","ほ","へ","と","ち","り")
)
dat# A tibble: 9 × 4
dai tyu syo nam
<chr> <chr> <chr> <chr>
1 A 1 a い
2 <NA> <NA> b ろ
3 <NA> <NA> c は
4 <NA> 2 a に
5 <NA> <NA> b ほ
6 <NA> <NA> c へ
7 <NA> <NA> d と
8 <NA> <NA> e ち
9 <NA> <NA> f り
このようあデータがある場合に、
dat %>% fill(dai,tyu)# A tibble: 9 × 4
dai tyu syo nam
<chr> <chr> <chr> <chr>
1 A 1 a い
2 A 1 b ろ
3 A 1 c は
4 A 2 a に
5 A 2 b ほ
6 A 2 c へ
7 A 2 d と
8 A 2 e ち
9 A 2 f り
埋めたい列を指定してあげるだけです
Argumentとしては、.directionというものがあります。ここで、downとupで方向を指定してうめることができます。
dat %>% fill(dai,tyu, .direction="down")# A tibble: 9 × 4
dai tyu syo nam
<chr> <chr> <chr> <chr>
1 A 1 a い
2 A 1 b ろ
3 A 1 c は
4 A 2 a に
5 A 2 b ほ
6 A 2 c へ
7 A 2 d と
8 A 2 e ち
9 A 2 f り
dat %>% fill(dai,tyu, .direction="up")# A tibble: 9 × 4
dai tyu syo nam
<chr> <chr> <chr> <chr>
1 A 1 a い
2 <NA> 2 b ろ
3 <NA> 2 c は
4 <NA> 2 a に
5 <NA> <NA> b ほ
6 <NA> <NA> c へ
7 <NA> <NA> d と
8 <NA> <NA> e ち
9 <NA> <NA> f り
また、もし欠損値でなくて、別の文字で空白が表されている場合、
dat <- tibble(
dai = c("A","","","","","","","",""),
tyu = c("1","","","2","","","","",""),
syo = c("a","b","c","a","b","c","d","e","f"),
nam = c("い","ろ","は","に","ほ","へ","と","ち","り")
)
dat# A tibble: 9 × 4
dai tyu syo nam
<chr> <chr> <chr> <chr>
1 "A" "1" a い
2 "" "" b ろ
3 "" "" c は
4 "" "2" a に
5 "" "" b ほ
6 "" "" c へ
7 "" "" d と
8 "" "" e ち
9 "" "" f り
if_elseとfillを組み合わせてあげると埋めることができます。
dat %>%
mutate(
dai = if_else(dai == "", NA_character_, dai),
tyu = if_else(tyu == "", NA_character_, tyu)
) %>%
fill(dai, tyu)# A tibble: 9 × 4
dai tyu syo nam
<chr> <chr> <chr> <chr>
1 A 1 a い
2 A 1 b ろ
3 A 1 c は
4 A 2 a に
5 A 2 b ほ
6 A 2 c へ
7 A 2 d と
8 A 2 e ち
9 A 2 f り
以上、簡単ですが使い方でした。 少し練習しておきましょう。