tblからdouble(numeric)の列だけ取り出す

tibbleからdoubleのデータだけ取り出したい場合、どうすればいいか少し手間取ったので、覚書を残す。


    require(dplyr)
    require(nycflights13)

    weather <- nycflights13::weather %>% 
      select(origin, time_hour, temp, humid, precip)
   

注釈:このweatherというデータはoriginがchar, time_hourがdate, それ以外がdoubleになっている。

 

まず、うまく行かないやり方:


    weather %>% select_if(is.double)
   

うまく行かない理由:date型がdoubleを継承しているため、is.doubleでdate型のtime_hourも返されてしまう。

 

うまくいくやり方(is.numericを使う):


    weather %>% select_if(is.numeric)
   

うまくいく理由:よくわからない。numeric→double→dateと継承しているはずなので、is.numericでもdate型(time_hour)が返されるのが(仕様上は)正しいような気がするが、現時点(2024/03/09)のdplyrではdate型(time_hour)が返ってこない(参考文献2を参照されたい)。Bad know-howかも。

 

参考文献

Introduction to tsibble

r - Why is `select_if(., is_double)` returning dates? - Stack Overflow