У меня есть кадр данных, как это:Условный группировки и обобщения кадр данных в [R]
df <- data.frame(ID = c("A", "A", "B", "B", "C", "C"),
time = c(3.1,3.2,6.5,12.3, 3.2, 3.4),
intensity = c(10, 20, 30, 40, 50, 60))
|ID | time| intensity| |:--|----:|---------:| |A | 3.1| 10| |A | 3.2| 20| |B | 6.5| 30| |B | 12.3| 40| |C | 3.2| 50| |C | 3.4| 60|
Я хотел бы агрегировать значения (интенсивности сумм) с помощью ID только, когда разница во времени меньше, т. е. 0,3. Сначала я вычислил эту разницу во времени:
df.2 <- df %>%
group_by(ID) %>%
mutate(time.diff = max(time) - min(time))
... в результате:
|ID | time| intensity| time.diff| |:--|----:|---------:|---------:| |A | 3.1| 10| 0.1| |A | 3.2| 20| 0.1| |B | 6.5| 30| 5.8| |B | 12.3| 40| 5.8| |C | 3.2| 50| 0.2| |C | 3.4| 60| 0.2|
Просто чтобы быть ясно, что я хотел бы получить как результат будет:
|ID | time| intensity| time.diff| |:--|----:|---------:|---------:| |A | 3.15| 30| 0.1| |B | 6.5| 30| 5.8| |B | 12.3| 40| 5.8| |C | 3.3| 110| 0.2|
, где время теперь представляет собой среднее значение интегрированных наблюдений, а интенсивность - их сумма. Идентификатор «B» сохраняет два наблюдения, так как разница во времени больше 0,3. Я попытался с dplyr, но подводит итог всегда будет отбрасывать одно из наблюдений «B», и я хочу их сохранить, и я не знаю, как сделать условным _group_by_.
Благодарю вас за любую идею!
@VeerendraGadekar Спасибо, я должен пропустить его. – akrun
@VeerendraGadekar Исправлен вывод. Еще раз спасибо за комментарии. – akrun
@Arun Спасибо, это намного лучше. – akrun