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

ワードでSEQを使って連番を作成する(式番号の自動割り振りなど)

[挿入]→[テキスト]→[フィールド(F)]→Seqを選択し、「フィールド・コード」の欄に「SEQ equation」などと入力する。

 

注意:SEQがコマンド、equationが識別子になる。

 

トラブルシューティング:連番が機能せず数字の順番がおかしくなった場合は、該当箇所を選択し、右クリックで「フィールド更新」を行なう

 

support.microsoft.com

dplyrでlag()を使って、valueをずらすと空いた欄にNAが入るためそれを0に置き換える

require(tidyverse)

date <- seq(as.Date("2020-1-1"), as.Date("2020-12-01"), by = "month")
date
value <- seq(1:12)

test <- data.frame(date, value)
test

# たとえば、lag()を使って、valueをずらすと
# 空いた欄にNAが入ることを確認するためのコード
# 1つ下にずらす
test |> mutate(value1 = lag(value,n=1)) |> 
  mutate(value2 = lag(value, n=2)) -> test1
test1

# replace_na()を使わずにNAを0に置き換える方法:

# https://stackoverflow.com/questions/49947592/replace-na-with-zero-in-dplyr-without-using-list
test1 %>% replace(is.na(.), 0) -> test2
test2

seq()は日・月・年ごとの年月を生成できる

date <- seq(as.Date("2020-1-1"), as.Date("2021-12-01"), by = "month")
date

日ごとにしたければ、by="day"、四半期ごとにしたければ、by="quarter"

 

長くRを使っているのだが、最近知った(古くからある機能らしい)。

 

 

RでStataのdtaを読み込む

いくつか方法があるが、パッケージhavenを使う方法が比較的手軽に使えるようである。以下は覚書。

 

require(haven)

url <- "http://www.principlesofeconometrics.com/stata/broiler.dta"

data.df <- read_dta(url)

 

参考文献:

How to Read and Write Stata (.dta) Files in R with Haven