R言語のDataFrameの処理についての質問になります。
以下に示しますDF1をDF2に変換したいです。
変換するためのよい方法、コードをご教示いただけないでしょうか?
※なお、実際の処理対象のDataFrameは約30万レコードになります。
【DF1】
ID | place | date | tool |
---|---|---|---|
001 | A | 2018/10/01 | XXX |
001 | A | 2018/10/02 | XXX |
001 | A | 2018/10/03 | XXX |
001 | A | 2018/10/04 | YYY |
001 | A | 2018/10/05 | YYY |
001 | A | 2018/10/06 | XXX |
001 | A | 2018/10/07 | XXX |
↓
【DF2】
ID | place | start_date | end_date | tool |
---|---|---|---|---|
001 | A | 2018/10/01 | 2018/10/03 | XXX |
001 | A | 2018/10/04 | 2018/10/05 | YYY |
001 | A | 2018/10/06 | 2018/10/07 | XXX |
【処理内容】
ID,place,toolが同一の連続したレコードのまとまりを1つのグループとみなし、
グループ中で最も古いdateをstart_date、最も新しいdateをend_dateとします。
ex) 10/01~03のグループの場合、start_dateは10/01、end_dateは10/03となります。
なお、10/01~03のグループと10/06~07のグループはID,place,toolが同一ですが
日付が連続していないので、別々のグループとみなします。
【補足】
# DF1→DF2への変換 library(dplyr) DF2 <- DF1 %>% group_by(ID, place, tool) %>% mutate(start_date = min(date)) %>% mutate(end_date = max(date)) %>% distinct(ID, place, start_date, end_date, tool)
上記のようなコードを書いた場合、以下のようにID,place,toolが同一のレコードで
まとまってしまうため、そうならないための方法を探しています。
ID | place | start_date | end_date | tool |
---|---|---|---|---|
001 | A | 2018/10/01 | 2018/10/07 | XXX |
001 | A | 2018/10/04 | 2018/10/05 | YYY |
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/08 06:03