Как рассчитать среднее значение, исключив первые 300 измерений в группе 1 в р - PullRequest
0 голосов
/ 19 июня 2019

У меня есть много 1-секундных измерений выбросов, и я сгруппировал их по номеру события. Однако я хотел бы удалить первые 300 измерений из группы 1 и рассчитать среднее значение по группе от 301 до последнего измерения в этой группе. Для остальных групп я просто вычислю среднее по группе, используя все измерения, не нужно вынимать первые 300 секунд.

Я знал код для вычисления средних групп, не исключая первые 300 измерений в группе 1, что-то вроде:

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 ]

1 голос
/ 19 июня 2019

Вы можете объединить @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 находится в другом порядке или если вы хотели, чтобы первые 100 строк Group 2.

1 голос
/ 19 июня 2019

В зависимости от размера реальной проблемы, самый простой способ - выполнить вычисления в два этапа

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))
...