【发布时间】:2020-03-26 14:39:43
【问题描述】:
在我的df1(包括df1$id、df1$datetime_interval、df1$datetime_event 和df1$event)中,我想将来自df2(包括df2$id、df2$datetime_event)的数据基于这些条件:
如果df1$id和df2$id匹配
并且如果df2$datetime_event在df1$datetime_interval内,
比我想将df2$datetime_event的数据复制到df1$datetime_event的列中,在df1的特定行中,和一个字符串(例如“是”)在df1$event。
如果条件不满足,我不想要结果(NA)
所以:
df1
ID datetime_interval datetime_event event
1 2019-04-19 21:50:00 UTC--2019-04-20 21:31:00 UTC NA NA
1 2019-07-02 04:23:00 UTC--2019-07-02 08:51:00 UTC NA NA
2 2019-07-04 19:45:00 UTC--2019-07-05 00:30:00 UTC NA NA
3 2019-06-07 08:55:00 UTC--2019-06-07 14:43:00 UTC NA NA
3 2019-05-06 17:18:00 UTC--2019-05-06 23:18:00 UTC NA NA
6 2019-08-02 22:00:00 UTC--2019-08-04 03:10:00 UTC NA NA
df2
ID datetime_event
1 2019-04-19 21:55:00
3 2019-05-06 21:23:00
5 2019-07-04 19:45:00
6 2019-05-06 17:18:00
6 2019-08-03 10:10:00
我已经尝试了一些东西,但它并没有像我想要的那样奏效。我仍然缺少一些步骤,我不知道如何继续前进。这是我到目前为止所拥有的:
for(i in seq_along(df1$id)){
for(j in seq_along(df2$id)){
ifelse(df2$id[j] == df1$id[i]) {
ifelse(df2$datetime_event[j] %within% df1$datetime_interval[i] == TRUE){
df1$datetime_event <- df2$datetime_ic_corr[j]
}
}
}
}
我想要的结果是这样的:
df1
ID datetime_event datetime_event event
1 2019-04-19 21:50:00 UTC--2019-04-20 21:31:00 UTC 2019-04-19 21:55:00 yes
1 2019-07-02 04:23:00 UTC--2019-07-02 08:51:00 UTC NA NA
2 2019-07-04 19:45:00 UTC--2019-07-05 00:30:00 UTC NA NA
3 2019-06-07 08:55:00 UTC--2019-06-07 14:43:00 UTC NA NA
3 2019-05-06 17:18:00 UTC--2019-05-06 23:18:00 UTC 2019-05-06 21:23:00 yes
6 2019-08-02 22:00:00 UTC--2019-08-04 03:10:00 UTC 2019-08-03 10:10:00 yes
提前感谢您的所有新意见!因为我被卡住了......
dput(df1)
structure(list(ID = c(1, 1, 2, 3, 3, 6), datetime_interval = c("2019-04-19 21:50:00 UTC--2019-04-20 21:31:00 UTC",
"2019-07-02 04:23:00 UTC--2019-07-02 08:51:00 UTC", "2019-07-04 19:45:00 UTC--2019-07-05 00:30:00 UTC",
"2019-06-07 08:55:00 UTC--2019-06-07 14:43:00 UTC", "2019-05-06 17:18:00 UTC--2019-05-06 23:18:00 UTC",
"2019-08-02 22:00:00 UTC--2019-08-04 03:10:00 UTC"), datetime_event = c("NA",
"NA", "NA", "NA", "NA", "NA"), event = c("NA", "NA", "NA", "NA",
"NA", "NA")), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
dput(df2)
structure(list(ID = c(1, 3, 5, 6, 6), datetime_event = c("2019-04-19 21:55:00 UTC",
"2019-05-06 21:23:00 UTC", "2019-07-04 19:45:00 UTC", "2019-05-06 17:18:00 UTC",
"2019-08-03 10:10:00 UTC")), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
【问题讨论】:
-
您能否与
dput共享输入df1和df2?这将使它们可以复制/粘贴,并使人们更容易展示解决方案。将dput(df1)(或者dput(head(df1)),如果您的实际数据大于您显示的数据)的输出放入您的问题中。 -
@GregorThomas 谢谢!我已将它们放入我的问题中!