Potrzebuję twojej pomocy, aby rozwiązać poniższe rozwiązanie. Mam dataframe, jak pokazano poniżej, z ponad 100 000 rzędami ok.

    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

Potrzebuję funkcji lub niektórych kodu, które pozwala mi dodać kolumnę "Wartość" do daty, w której pojawia się "pierwsza" 1 w kolumnie "Wpisz" i grupuj je później, powinno być następujące:

    ID    Value
   AAA     180          
   BBB      70 

Suma "AAA" jest 180, ponieważ dodała do znalezienia daty (06/02/20), gdzie pojawia się "1" w kolumnie "Typ".

Innymi słowy, należy wykonać sumę kolumny do określonej daty, którą mogę wskazać przy wartości innej kolumny.

Bardzo ci dziękuje za pomoc. To moje pierwsze pytanie we Wspólnocie.

Jeśli masz alternatywną odpowiedź, wyeliminując pewne wymagania, doceniam też to.

0
lfvalencia 20 październik 2020, 03:55

1 odpowiedź

Najlepsza odpowiedź

Możesz użyć match, aby uzyskać pierwsze wystąpienie 1 w kolumnie {X1}} i kolumna sum Value do tego czasu.

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

dane

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))
3
Ronak Shah 20 październik 2020, 00:58