Группировать и добавлять значения столбца до определенной даты. R

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