在dplyr中使用整数范围

时间:2018-07-18 02:47:10

标签: r dplyr range

我有一个tibble,用于对300个县中的每个县经历(可能)复发事件进行编码。 “数据的形状”为:

county  event_start  event_end
A       3            6
A       12           20
A       71           80
B       1            3
B       19           30
...

这里有一些有用的特征:

  • 没有丢失的数据。
  • 没有一个县有两个重叠的事件(两个事件的event_start_2总是大于event_end_1)
  • 在县内,对事件进行排序。

我想重塑数据,使其更像这样:

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样的方法吗?

1 个答案:

答案 0 :(得分:3)

一种选择是使用mapunnest 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