とある技術者の徒然草

生産技術者の適当な日記(統計言語Rに関するメモがメイン)

【R】dplyr 複数の条件で場合分け+(おまけ:累計数を計算)

複数の条件で場合分けして数値を変換 case_when()の使い方

例えば時刻の「分」を15分単位で離散化したいといった場合を想定。
dplyrのcase_when()関数が使いやすかったのでメモする。

library(tidyverse)

#時刻 分 のダミーベクトルを生成する
hour <-  as.integer( runif(20, min = 0, max = 11) )
minute <- as.integer( runif(20, min = 0, max = 60) )

df    <- data.frame(hour=hour, minute=minute)

df %>% 
  mutate(minu = case_when(
  minute >= 0 & minute < 15 ~0,
  minute >= 15 & minute <30 ~15,
  minute >= 30 & minute <45 ~30,
  minute >= 45 ~45)
  )

累計数を数える関数cumsum()

#仮想データフレーム作成
hour2 <- rep(seq(0,23,1),1,each = 4) 
minute2 <- rep(seq(0,45,15),24)
output <- as.integer( runif(96, min = 10, max = 100) )

df2    <- data.frame(hour=hour2, minute=minute2, output=output)

#outputの累計数を数える
df2 %>% 
  mutate(sumout = cumsum(output)) ->df3