【发布时间】:2021-01-09 15:43:14
【问题描述】:
我有两个数据框,我想有条件地从一个数据框的一列中提取数据并将其放入另一个数据框的新列中。
数据框 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]
}
}
【问题讨论】:
标签: r loops vectorization