Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dplyr中使用整数范围_R_Dplyr_Range - Fatal编程技术网

在dplyr中使用整数范围

在dplyr中使用整数范围,r,dplyr,range,R,Dplyr,Range,我有一个tibble,当300个县中的每个县都经历了(潜在的)复发事件时进行编码。“数据形状”为: 这里有一些有用的特征: 没有丢失数据 没有县有两个重叠的事件(对于两个事件,事件\u开始\u 2始终大于事件\u结束\u 1) 在县内,事件被分类 我想将数据重塑为更像这样: county day event A 1 no A 2 no A 3 yes A 4 yes A 5

我有一个
tibble
,当300个县中的每个县都经历了(潜在的)复发事件时进行编码。“数据形状”为:

这里有一些有用的特征:

  • 没有丢失数据
  • 没有县有两个重叠的事件(对于两个事件,事件\u开始\u 2始终大于事件\u结束\u 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
ish的方法可以做到这一点呢

一个选项是获取“事件开始”、“事件结束”与
map
unnest
的相应元素之间的顺序
列表
输出以展开数据,使用
complete
填充“日期”并
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
库(tidyverse)
df1%>%
转换(县,日=map2(事件开始,事件结束,顺序),事件='是')%>%
最新%>%
组别(县)%>%
完成(天=序号(最大(天)))%>%
mutate(event=replace(event,is.na(event),'no'))
#一个tibble:110x3
#组别:县[2]
#县日活动
#      
#1 A 1号
#2 A 2不
#3 A 3是的
#是的
#5 A 5是的
#是的
#7 A 7不
#8 A 8不
#9 A 9不
#10 A 10不
# ... 还有100多行
数据
df1我惊讶于这个问题的答案是如此之快,答案是如此完美。
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
df1 <- structure(list(county = c("A", "A", "A", "B", "B"), event_start = c(3L, 
12L, 71L, 1L, 19L), event_end = c(6L, 20L, 80L, 3L, 30L)), .Names = c("county", 
"event_start", "event_end"), class = "data.frame", row.names = c(NA, 
-5L))