首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >汇总间隔相邻的组

汇总间隔相邻的组
EN

Stack Overflow用户
提问于 2020-05-08 23:02:07
回答 1查看 33关注 0票数 1

我有一个数据帧,它包含两个分组变量(ID和Grouping)的间隔数据(From和To)。我试图将数据汇总到具有相同ID和分组的组中,并且间隔相邻。

下面是一个示例数据帧。我知道可以使用dplyr中的group_by函数对数据进行分组,也可以使用dplyr中的汇总函数进行汇总(在本例中,使用每个组的总和进行汇总),但不确定如何确保dplyr只加入间隔相邻的组。

代码语言:javascript
运行
复制
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

以下是所需的结果

代码语言:javascript
运行
复制
   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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-08 23:24:07

使用From != lag(To)cumsum生成每个间隔并汇总数据。

代码语言:javascript
运行
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61682079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档