我们可以创建一个分组变量,gl然后得到sum
library(dplyr)
library(stringr)
n1 <- 3 # change to 550
df %>%
group_by(grp = as.integer(gl(n(), n1, n()))) %>%
summarise(range = str_c(first(id), last(id), sep=" -- "), sum = sum(numbers)) %>%
select(-grp)
# A tibble: 5 x 2
# range sum
# <chr> <int>
#1 1 -- 3 21
#2 4 -- 6 30
#3 7 -- 9 39
#4 10 -- 12 48
#5 13 -- 15 57
Run Code Online (Sandbox Code Playgroud)
基础 R 中的解决方案:
grp = (1:nrow(df) - 1)%/%3
data.frame(
range = aggregate(df$id, list(grp),
function(x) paste(range(x), collapse=" -- "))$x,
sum = aggregate(df$numbers, list(grp), sum)$x,
stringsAsFactors = FALSE)
## range sum
## 1 1 -- 3 21
## 2 4 -- 6 30
## 3 7 -- 9 39
## 4 10 -- 12 48
## 5 13 -- 15 57
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |