我有一个包含许多国家,日期和值的数据集。我需要找到每个国家最早的正值(> 0)最早的一天。在下面的意大利示例中,日期2020-03-24的Day_Count应该为1,并且应该继续向上递增。
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
有人可以帮助我解决这个问题吗? 预先感谢。
答案 0 :(得分:2)
您可以尝试:
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 :(得分:1)
我们可以使用dplyr
library(dplyr)
df %>%
mutate(Day_Count = rev(cumsum(rev(Value) != 0)))