我有一个数据帧,它包含两个分组变量(ID和Grouping)的间隔数据(From和To)。我试图将数据汇总到具有相同ID和分组的组中,并且间隔相邻。
下面是一个示例数据帧。我知道可以使用dplyr中的group_by函数对数据进行分组,也可以使用dplyr中的汇总函数进行汇总(在本例中,使用每个组的总和进行汇总),但不确定如何确保dplyr只加入间隔相邻的组。
ID <- c('ID1','ID1','ID1','ID1','ID1','ID1','ID2','ID2','ID2','ID2')
grouping <- c(1,1,1,1,1,1,1,1,1,1)
From <- c(1,5,6,20,40,41,45,52,60,61)
To <- c(5,6,10,25,41,45,52,53,61,62)
Value <- c(1,2,1,2,2,3,1,1,1,4)
df <- data.frame(ID, grouping, From, To, Value)
ID grouping From To Value
1 ID1 1 1 5 1
2 ID1 1 5 6 2
3 ID1 1 6 10 1
4 ID1 1 20 25 2
5 ID1 1 40 41 2
6 ID1 1 41 45 3
7 ID2 1 45 52 1
8 ID2 1 52 53 1
9 ID2 1 60 61 1
10 ID2 1 61 62 4
以下是所需的结果
ID grouping From To Value
1 ID1 1 1 10 4
2 ID1 1 20 25 2
3 ID1 1 40 45 5
4 ID2 1 45 53 2
5 ID2 1 60 62 5
发布于 2020-05-08 23:24:07
使用From != lag(To)
和cumsum
生成每个间隔并汇总数据。
library(dplyr)
df %>%
group_by(ID, grouping, interval = cumsum(From != lag(To, default = From[1]))) %>%
summarise(From = min(From), To = max(To), Value = sum(Value)) %>%
ungroup %>%
select(-interval)
# # A tibble: 5 x 5
# ID grouping From To Value
# <fct> <dbl> <dbl> <dbl> <dbl>
# 1 ID1 1 1 10 4
# 2 ID1 1 20 25 2
# 3 ID1 1 40 45 5
# 4 ID2 1 45 53 2
# 5 ID2 1 60 62 5
https://stackoverflow.com/questions/61682079
复制相似问题