我试图通过找到每两周间隔的最大值来简化大型数据集(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周......)。它并不像组合每一行一样简单,因为每周都会被采样。
我假设这是一个简单的解决方案,我还没有找到它。
谢谢!
答案 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