我有一个tibble
,用于对300个县中的每个县经历(可能)复发事件进行编码。 “数据的形状”为:
county event_start event_end
A 3 6
A 12 20
A 71 80
B 1 3
B 19 30
...
这里有一些有用的特征:
我想重塑数据,使其更像这样:
county day event
A 1 no
A 2 no
A 3 yes
A 4 yes
A 5 yes
A 6 yes
A 7 no
...
我可以想象如何通过一堆for
循环等来做到这一点。但是,有dplyr
样的方法吗?
答案 0 :(得分:3)
一种选择是使用map
,unnest
list
输出获取'event_start','event_end'的相应元素之间的顺序以扩展数据,使用{{1 }},将“事件”列的“天”和complete
元素的replace
填充为“否”
NA
library(tidyverse)
df1 %>%
transmute(county, day = map2(event_start, event_end, seq), event = 'yes') %>%
unnest %>%
group_by(county) %>%
complete(day = seq_len(max(day))) %>%
mutate(event = replace(event, is.na(event), 'no'))
# A tibble: 110 x 3
# Groups: county [2]
# county day event
# <chr> <int> <chr>
# 1 A 1 no
# 2 A 2 no
# 3 A 3 yes
# 4 A 4 yes
# 5 A 5 yes
# 6 A 6 yes
# 7 A 7 no
# 8 A 8 no
# 9 A 9 no
#10 A 10 no
# ... with 100 more rows