我有两个数据框,我想有条件地从一个数据框的一列中提取数据,并将其放入另一个数据框的新列中。
数据框1长这样:
数据帧2看起来像这样:
如果 df.1 的 date.start 和 date.end 在 df2 的任何行的 date.start 或 date.end 范围内,则我想从 df2 中提取变量 day 并将其放入匹配的 df1 行中。预期结果如下所示:
我目前有以下循环,它可以工作,但是当我在我的大型数据框上运行它时(行数=1135133),它非常慢,我想知道是否有更快的方法来完成这个任务。
数据框1长这样:
df1 <- data.frame(date.start = c("2019-06-10 11:52:00",
"2019-06-11 11:52:00", "2019-06-12 11:51:00"), date.end =
c("2019-06-10 11:53:00", "2019-06-11 11:53:00", "2019-06-12 11:53:00"))
数据帧2看起来像这样:
df2 <- data.frame(date.start = c("2019-06-11 11:50:00",
"2019-06-10 11:51:00", "2019-06-12 11:50:00"), date.end =
c("2019-06-11 11:54:00", "2019-06-11 08:59:00", "2019-06-12 11:57:00"),
day = c(1, 15, 64))
如果 df.1 的 date.start 和 date.end 在 df2 的任何行的 date.start 或 date.end 范围内,则我想从 df2 中提取变量 day 并将其放入匹配的 df1 行中。预期结果如下所示:
expected.out <- data.frame(date.start = c("2019-06-10 11:52:00", "2019-06-11 11:52:00", "2019-06-12 11:51:00"),
date.end = c("2019-06-10 11:53:00", "2019-06-11 11:53:00", "2019-06-12 11:53:00"),
day = c(15, 1, 64))
我目前有以下循环,它可以工作,但是当我在我的大型数据框上运行它时(行数=1135133),它非常慢,我想知道是否有更快的方法来完成这个任务。
for(i in 1:nrow(df1)){
find.match <- which(df1$date.start[i] >= df2$date.start &
df1$date.end[i] <= df2$date.end)
if(length(find.match) !=0){
df1$day[i] <- df2$day[find.match]
}
}