每x行合并一次数据帧

时间:2016-08-21 15:37:23

标签: r dataframe merge

我正在尝试按每第n行合并数据框中的值。 数据结构如下:

id  value
1   1
2   2
3   1
4   2
5   3
6   4
7   1
8   2
9   4
10  4
11  2
12  1

我喜欢聚合每4行的值。实际上,数据集描述了每个4天时段的测量值。

id“1”= day1,
id“2”= day2,
id“3”= day3,
id“4”= day4,
id“5”= day1,
......

因此,可以使用从1到4的循环计数的列?

结果看起来应该是(总和):

day sum
1   8
2   10
3   4
4   5

2 个答案:

答案 0 :(得分:3)

可以使用%%创建分组变量,然后使用sum执行aggregate

n <- 4
aggregate(value ~cbind(day = (seq_along(df1$id)-1) %% n + 1), df1, FUN = sum)
#   day value
#1   1     8
#2   2    10
#3   3     4
#4   4     5

此方法也可以与dplyr/data.table

一起使用
library(dplyr)
df1 %>%
     group_by(day = (seq_along(id)-1) %% 4 +1) %>%
      summarise(value = sum(value))
#     day value
#  <dbl> <int>
#1     1     8
#2     2    10
#3     3     4
#4     4     5

setDT(df1)[, .(value = sum(value)), .(day = (seq_along(id) - 1) %% 4 + 1)]
#   day value
#1:   1     8
#2:   2    10
#3:   3     4
#4:   4     5

答案 1 :(得分:1)

你需要制作一个序列来分组,例如

rep(1:4, length = nrow(df))
## [1] 1 2 3 4 1 2 3 4 1 2 3 4

aggregate

aggregate(value ~ cbind(day = rep(1:4, length = nrow(df))), df, FUN = sum)

##   day value
## 1   1     8
## 2   2    10
## 3   3     4
## 4   4     5

或dplyr:

library(dplyr)

df %>% group_by(day = rep(1:4, length = n())) %>% summarise(sum = sum(value))

## # A tibble: 4 x 2
##     day   sum
##   <int> <int>
## 1     1     8
## 2     2    10
## 3     3     4
## 4     4     5

或data.table:

library(data.table)

setDT(df)[, .(sum = sum(value)), by = .(day = rep(1:4, length = nrow(df)))]

##    day sum
## 1:   1   8
## 2:   2  10
## 3:   3   4
## 4:   4   5