#r #dataframe #filter #group-by #sum
#r #dataframe #Фильтр #группировать по #сумма
Вопрос:
Мне нужна ваша помощь, пожалуйста, чтобы решить следующее. У меня есть фрейм данных, как показано ниже, с более чем 100 000 строк ок.
ID Date Value Type
AAA 01/01/20 10 0
BBB 26/01/20 10 0
AAA 05/02/20 80 0
AAA 06/02/20 90 1
BBB 21/02/20 60 1
AAA 08/02/20 10 0
AAA 10/03/20 80 1
Мне нужна функция или какой-то код, который позволяет мне добавлять столбец «значение» до даты, в которой появляется «первый» 1 в столбце «тип», и группировать их позже, это должно быть следующим образом:
ID Value
AAA 180
BBB 70
Сумма «AAA» равна 180, поскольку она суммируется, чтобы найти дату (06/02/20), где «1» появляется в столбце «Тип».
Другими словами, это делается для того, чтобы составить сумму столбца до определенной конкретной даты, которую я могу указать значением другого столбца.
Большое вам спасибо за вашу помощь. Это мой первый вопрос в сообществе.
Если у вас есть альтернативный ответ, устраняющий некоторые требования, я также ценю это.
Ответ №1:
Вы можете использовать match
для получения первого вхождения 1 в Type
столбце и sum
Value
столбца до тех пор.
library(dplyr)
df %>%
group_by(ID) %>%
summarise(Value = sum(Value[seq_len(match(1, Type))]))
# ID Value
# <chr> <int>
#1 AAA 180
#2 BBB 70
данные
df <- structure(list(ID = c("AAA", "BBB", "AAA", "AAA", "BBB", "AAA",
"AAA"), Date = c("01/01/20", "26/01/20", "05/02/20", "06/02/20",
"21/02/20", "08/02/20", "10/03/20"), Value = c(10L, 10L, 80L,
90L, 60L, 10L, 80L), Type = c(0L, 0L, 0L, 1L, 1L, 0L, 1L)),
class = "data.frame", row.names = c(NA, -7L))