我有一个DF1,它包含一系列带有开始日期(开始日期)和结束日期(结束日期)的观察结果:它们都是y / m / d格式。我想检查来自另一个数据集(DF2,也有一个日期变量)的观察是否在DF1$startdate
和DF1$endate.
在实践中,我希望得到:
如果每个DF2$date
和DF1$startdate
的时间间隔中包含每个DF1$endate
。
不幸的是,我不能手动完成,因为观察次数需要很长时间。
我试过这个,但它似乎不起作用:
for (i in 1:length(DF2$date))
{
for (j in 1:length(DF1$startdate)){
if (DF1$startdate[j] <= DF2$date[i]
<= DF1$enddate[j]){
DF2 = append(frcab_content_lemma_ngram_postprocessed$HasMid, 1)
}
else {DF2$HasMid = append(DF2$HasMid, 0}
}
}
谢谢!
答案 0 :(得分:1)
这是使用dplyr
的理想场所。我在这里做的是left_join
DF1和DF2,所以我们可以使用每个变量,然后使用mutate()
添加一个新变量'hasMid'
,其值根据{的结果设置{1}}陈述:
if_else
输出:
library(dplyr)
DF1 <- data.frame(x = c(1, 2, 3, 1, 1, 2),
startdate = c(10, 15, 12, 5, 6, 21),
enddate = c(11, 25, 18, 7, 19, 30))
DF2 <- data.frame(x = c(1,2,3), date = c(8, 21, 19))
x <- DF1 %>%
left_join(DF2, by = c('x' = 'x')) %>%
mutate(hasMid = if_else(startdate <= date & date <= enddate, TRUE, FALSE))
对于未来,如果你给人们一个简单的可重复的例子,那么回答这样的问题要容易得多: