在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))