我有2个 Dataframe ,一个(df1
)记录每天发生的不同活动,另一个(df2
)记录当天发生的活动的属性。
从df1
可以识别活动的重复发生以及持续时间。一天的开始时间由Date
变量指定。
例如:
id
12事件从day1开始,到d7结束。在本例中,事件为7,持续时间为11。- 对于
id
123,该周开始于第5天并且结束于第7天;由于在第6天存在间隔日,因此以重复顺序发生,持续时间为6,并且ID123(开始于第6天,结束于第7天)连续发生2次,持续时间为6。
在df1
中,变量Date定义记录开始的日期。例如,id 12记录开始于day1,以此类推。
我想确定在连续发生期间,df2
中是否有活动属性记录。
例如,ID 12,发生7次,持续时间为12,有星期三的记录(df1
中的第3天),该记录对应于连续发生的第3天。对于ID 123,没有数据(例如,没有连续发生),但对于发生6天、持续时间为18的ID 10,有第6天的记录。
Df1:
id day1 day2 day3 day4 day5 day6 day7 Date
12 2 1 2 1 1 3 1 Mon
123 0 3 0 3 3 0 3 Fri
10 0 3 3 3 3 3 3 Sat
Df2:
id c1 c2 Date
12 3 3 Wednesday
123 3 2 Fri
10 3 1 Sat
结果:
id c1 c2 Occurrence Position
12 3 3 7 3
123 0 0 0 0
10 3 1 2 1
样本数据:DF1
structure(list(id = c(12L, 123L, 10L), day1 = c(2L, 0L, 3L),
day2 = c(1L, 3L, 3L), day3 = c(2L, 0L, 3L), day4 = c(1L,
3L, 3L), day5 = c(1L, 3L, 3L), day6 = c(3L, 0L, 3L), day7 = c(1L,
3L, 3L), Date = c("Monday", "Friday", "Saturday")), row.names = c(NA,
-3L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x000002a81a571ef0>)
DF2:
structure(list(id = c(12, 123, 10), c1 = c(3, 3, 3), c2 = c(3,
2, 1), Date = structure(c(3L, 1L, 2L), .Label = c("Friday", "Saturday",
"Wednesday"), class = "factor")), row.names = c(NA, -3L), class = "data.frame")
1条答案
按热度按时间thtygnil1#
dplyr
的解(可能不是最短的解):由reprex package(v0.2.1)于2020年4月10日创建