В R как найти самый ранний день со значением> 0 - PullRequest
1 голос
/ 28 марта 2020

У меня есть набор данных со многими странами, датами и значениями. Мне нужно найти самый ранний день с первым положительным (> 0) значением для каждой страны. В следующем примере для Италии Day_Count должен быть 1 для даты 2020-03-24, и он должен продолжать расти в сторону увеличения.

     Country.Region       Date Value
9638          Italy 2020-03-27 150
9639          Italy 2020-03-26 120
9640          Italy 2020-03-25 110
9641          Italy 2020-03-24 80
9642          Italy 2020-03-23 0
9643          Italy 2020-03-22 0

Так что мои окончательные данные должны выглядеть следующим образом

     Country.Region       Date Value  Day_Count
9638          Italy 2020-03-27 150    4
9639          Italy 2020-03-26 120    3
9640          Italy 2020-03-25 110    2
9641          Italy 2020-03-24 80     1
9642          Italy 2020-03-23 0      0
9643          Italy 2020-03-22 0      0

Кто-нибудь поможет мне решить эту проблему? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Вы можете попробовать:

transform(df, Day_Count = rev(cumsum(rev(Value) != 0)))

Вывод:

  Country.Region       Date Value Day_Count
1          Italy 2020-03-27   150         4
2          Italy 2020-03-26   120         3
3          Italy 2020-03-25   110         2
4          Italy 2020-03-24    80         1
5          Italy 2020-03-23     0         0
6          Italy 2020-03-22     0         0

Или для разных стран:

transform(df, Day_Count = ave(Value, Country.Region, FUN = function(x) rev(cumsum(rev(x) != 0))))
1 голос
/ 28 марта 2020

Мы можем использовать dplyr

library(dplyr)
df %>%
     mutate(Day_Count = rev(cumsum(rev(Value) != 0)))
...