我有一个三列表(Table_1),我想基于Table_1创建另一个表。该表具有个人ID以及工作的开始和结束日期。
Table_1 <- data.frame(ID = c("A", "B", "C"), Start_Day = c(1, 20, 38), End_Day = c(14, 29, 42))
我要创建的新表将具有两列,即ID和Week。每个ID级别的行数等于End_Day和Start_Day的bin(周)数。例如,ID A将具有2个星期档1(第1-7天)和2个周(8-14天),ID B将具有3个星期档,3个(15-21天),4个(22-28天)和5(第29-35天)。 预期结果是:
Table_2 <- data.frame(ID = c("A", "A", "B", "B", "B", "C" ), Week = c(1, 2, ,3, 4, 5, 6))
答案 0 :(得分:0)
一种方法是将Start_Day
和End_Day
除以7,并使用map2
在它们之间创建一个序列,并使用unnest
将数据加长格式。
library(dplyr)
Table_1 %>%
mutate_at(-1, ~ceiling(./7)) %>%
mutate(Week = purrr::map2(Start_Day, End_Day, seq)) %>%
tidyr::unnest(Week) %>%
select(ID, Week)
# A tibble: 6 x 2
# ID Week
# <fct> <int>
#1 A 1
#2 A 2
#3 B 3
#4 B 4
#5 B 5
#6 C 6