【发布时间】:2019-09-07 10:25:42
【问题描述】:
我希望在 events_table 中查找 individual id 并将 total_duration 计算为 date 之前所有事件的持续时间的总和。
持续时间是date_start 和date (table1) 之间的时间,除非事件结束(即有date_end),在这种情况下如果date_end < date、duration = date_end - date_start。
在伪代码中:
IF (date>date_start) Then{
IF(date_end < date & date_end != NA) Then{
duration = date_end-date_start
} else if (date_start < date) {
duration = date - date_start
}
}
Then sum all the durations separately for each "individual_id" and "date" combo
我正在使用 data.tables,因为我有大表(>1m 行)。
我的数据看起来有点像这样:
table1 <- fread(
"individual id | date
1 | 2019-01-02
1 | 2019-01-03
2 | 2019-01-02
2 | 2019-01-03",
sep ="|"
)
events_table<- fread(
"individual id | date_start | date_end
1 | 2018-01-02 | NA
1 | 2018-01-04 | 2018-07-01
1 | 2018-01-05 | NA
2 | 2018-01-01 | NA
2 | 2018-01-02 | NA
2 | 2018-01-05 | 2018-11-21",
sep = "|"
)
输出应该如下:
table1 <- fread(
"individual id | date | total_duration
1 | 2019-01-02 | 905
1 | 2019-01-03 | 907
2 | 2019-01-02 | 1051
2 | 2019-01-03 | 1053",
sep ="|"
)
我在开始查询时的最佳猜测来自:
table1[, total_duration:= events_table[table1,
on = .(`individual id`, date>date_start),
sum(date-date_start),
by = .EACHI][["V1"]]]
但我不知道包含 if 条件的语法。
感谢您的帮助。
【问题讨论】:
-
我想你错过了第二个 fread 中的
" -
@akrun 你是对的,我已经更新了它
标签: r data.table rmysql