我有许多1秒发射测量值,并已将它们按事件编号分组。但是,我想从组1中删除前300个测量值,并计算从301到该组中最后一个测量值的组平均值。对于其余的组,我将仅使用所有测量结果计算组平均值,而无需花费前300秒。
我知道在不排除第1组的前300个测量值的情况下计算组平均值的代码,如下所示:
StartsSummary <- ddply(emission, "Group", summarize, CO2_avg = mean(CO2_DC))
emission <- data.frame(Group= c(rep(1, 400), rep(2, 305),rep(3, 200)), CO2_DC = c(rep(0.5, 350), rep(1, 400), rep(1.5, 155))
我希望结果为:
Group CO2_avg
1 0.75 (excluding first 300 measurements in group 1)
2 1 (include all measurements in group 2)
3 1.3875 (include all measurements in group 3)
答案 0 :(得分:1)
根据实际问题的大小,最简单的方法是分两个阶段进行计算
library(tidyverse)
# Mean of groups 2 and 3 using all data
emission %>%
filter(Group != 1) %>% # exclude group 1
group_by(Group) %>%
summarise(mean(CO2_DC))
# Mean of group 1 exclusing the first 300 rows
emission %>%
filter(Group == 1) %>%
slice(301:n()) %>%
summarise(mean(CO2_DC))
答案 1 :(得分:1)
您可以将@TonyLadson和@tmfmnk合并为一个过滤器语句。
library(dplyr)
emission <- data.frame(Group= c(rep(1, 400), rep(2, 305),rep(3, 200)), CO2_DC = c(rep(0.5, 350), rep(1, 400), rep(1.5, 155)))
emission%>%
group_by(Group)%>%
filter(!(Group == 1 & row_number() %in% 1:300))%>%
summarize(CO2_Avg = mean(CO2_DC))
Group CO2_Avg
<dbl> <dbl>
1 1 0.75
2 2 1
3 3 1.39
编辑:我切换了group_by()
和filter()
语句的顺序。这样一来,如果Group
的顺序不同或您想要Group 2
的前100行,该语句就可以工作。