如何通过排除r中第1组的前300个测量值来计算平均值

时间:2019-06-18 21:05:03

标签: r filter average

我有许多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)

2 个答案:

答案 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行,该语句就可以工作。