聚合奇数/偶数对

时间:2017-09-08 18:19:10

标签: r aggregate

我试图通过找到每两周间隔的最大值来简化大型数据集(52k +行)。我已经为每一行分配了周数值,并使用aggregate()函数来查找每周的最大值。

简化的样本数据:

week <- c(1:5, 5, 7:10)
conc <- rnorm(mean=50, sd=20, n=10)
df <- data.frame(week,conc)

aggregate(df, by=list(week), FUN=max)

但是,我仍然坚持如何根据两周的时间间隔进一步聚合(例如:第1周和第2周,第3周和第4周......)。它并不像组合每一行一样简单,因为每周都会被采样。

我假设这是一个简单的解决方案,我还没有找到它。

谢谢!

3 个答案:

答案 0 :(得分:1)

week <- c(1:5, 5, 7:10)

bi_week <- (week+1)%/%2

conc <- rnorm(mean=50, sd=20, n=10)

df <- data.frame(week,bi_week,conc)

aggregate(df, by=list(bi_week), FUN=max)

答案 1 :(得分:0)

library(purrr)
library(dplyr)

Odds<-seq(1:max(week),2)
Evens<-seq(2,max(week),2)

map2(.x=Odds,.y=Evens, .f=function(x,y) {df %>% 
filter(week==x | week==y) %>% select(conc) %>% max})

我首先制作了几率甚至数字的向量。然后使用purrr包我将这些成对(1&amp; 2,然后3&amp; 4等)输入到使用dplyr包来获得正确周数的函数中,选择conc价值并取最大值

这是输出:

> map2(.x=Odds,.y=Evens, .f=function(x,y) {df %>% filter(week==x | week==y) %>% select(conc) %>% max})
[[1]]
[1] 68.38759

[[2]]
[1] 56.9231

[[3]]
[1] 77.23965

[[4]]
[1] 49.39443

[[5]]
[1] 49.38465

注意:您可以使用map2_dbl代替map2并获取数字向量

修改:删除了关于df2的部分,因为这是一个错误。

答案 2 :(得分:0)

使用pracma::ceil抓住每两周一对

library(pracma)
aggregate(df, by=list(ceil(df$week/2)), FUN=max)

输出

  Group.1 week     conc
1       1    2 76.09191
2       2    4 50.20154
3       3    5 54.93041
4       4    8 69.17820
5       5   10 74.67518

ceil(df$week/2)
# 1 1 2 2 3 3 4 4 5 5