将数据帧与运行的分钟时钟合并时的重复条件,以及具有所述条件的开始时间的另一个条件[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有两个数据帧,我试图合并。一个数据框具有活动列表和活动的开始时间。另一个数据帧有一个运行时钟和一些分钟数据。例如

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
...
r join merge dplyr plyr
1个回答
0
投票

试试这个

merge(df1, df2, by = c("ID", "Timestamp"), copy = TRUE, all.y = T) %>%
 mutate(ACTIVITY2 = case_when(is.na(ACTIVITY) ~ lag(ACTIVITY),
                              TRUE ~ ACTIVITY))
© www.soinside.com 2019 - 2024. All rights reserved.