【发布时间】:2018-08-10 07:23:50
【问题描述】:
我在 data.frame 中有两个日期(date1 和 date2)和一个 id 变量:
dat <- data.frame(c('2014-02-11', '2014-05-04', '2014-05-22'), c('2014-04-12', '2014-09-22', '2014-07-04'), c('a', 'a', 'b'))
names(dat) <- c('date1', 'date2', 'id')
dat$date1 <- as.character.Date(dat$date1, format = '%Y-%m-%d')
dat$date2 <- as.character.Date(dat$date2, format = '%Y-%m-%d')
> dat
date1 date2 id
1 2014-02-11 2014-04-12 a
2 2014-05-04 2014-09-22 a
3 2014-05-22 2014-07-04 b
我想创建一个新变量 var 来指示 any date2 日期值是否在该行的 date1 日期值之前(不仅仅是紧接在前面的 date2 值它):
> dat
date1 date2 id var
1 2014-02-11 2014-04-12 a 0
2 2014-05-04 2014-09-22 a 1
3 2014-05-22 2014-07-04 b 0
我已经能够通过以下循环实现这一点:
ids <- as.vector(unique(unlist(dat$id)))
dat$var <- as.numeric(0)
for (i in ids) {
date2s <- as.vector(unlist(filter(dat, id == i)$date2))
for (j in date2s) {
dat <- dat %>% mutate(var = replace(var, (j < date1) & (id == i), 1)) # if any cdate precedes rdate
}
}
但是,我的数据集非常大,如果可能的话,我想使用data.table 来实现这一点,但如果有有效的方法,我很乐意使用dplyr 来解决这个问题。
【问题讨论】:
-
你的意思是
date1 > min(date2)? -
我的意思是如果给定行中存在任何小于
date1值的date2值。
标签: r date group-by dplyr data.table