这个问题在这里已有答案:
我有两个数据帧,我试图合并。一个数据框具有活动列表和活动的开始时间。另一个数据帧有一个运行时钟和一些分钟数据。例如
DF1
ID ACTIVITY Timestamp
1 Act1 2014-11-10 11:56:00
1 Act2 2014-11-10 11:59:00
1 Act3 2014-11-10 12:02:00
1 Act4 2014-11-10 12:06:00
...
DF2
ID Timestamp
1 2014-11-10 11:56:00
1 2014-11-10 11:57:00
1 2014-11-10 11:58:00
1 2014-11-10 11:59:00
1 2014-11-10 12:00:00
1 2014-11-10 12:01:00
1 2014-11-10 12:02:00
...
我想合并这两个,所以来自df1的ACTIVITY应用于匹配的时间戳和所有后续的分钟,直到下一个ACTIVITY时间戳
我尝试了以下代码,但它只将活动应用于匹配的时间戳
我希望这样的事情
ID Timestamp ACTIVITY
1 2014-11-10 11:56:00 Act1
1 2014-11-10 11:57:00 Act1
1 2014-11-10 11:58:00 Act1
1 2014-11-10 11:59:00 Act2
1 2014-11-10 12:00:00 Act2
1 2014-11-10 12:01:00 Act2
1 2014-11-10 12:02:00 Act3
...
但我从目前的代码中得到了这个
merge(df1, df2, by = c("ID", "Timestamp"), copy = TRUE, all.y = T)
ID Timestamp ACTIVITY
1 2014-11-10 11:56:00 Act1
1 2014-11-10 11:57:00 NA
1 2014-11-10 11:58:00 NA
1 2014-11-10 11:59:00 Act2
1 2014-11-10 12:00:00 NA
1 2014-11-10 12:01:00 NA
1 2014-11-10 12:02:00 Act3
...
试试这个
merge(df1, df2, by = c("ID", "Timestamp"), copy = TRUE, all.y = T) %>%
mutate(ACTIVITY2 = case_when(is.na(ACTIVITY) ~ lag(ACTIVITY),
TRUE ~ ACTIVITY))