135  実践 fill

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     り   

以上、簡単ですが使い方でした。 少し練習しておきましょう。