根据R中的日期对子设置行
我试图解决R中的一个问题。我有两个数据帧,看起来像这样:根据R中的日期对子设置行,r,dplyr,R,Dplyr,我试图解决R中的一个问题。我有两个数据帧,看起来像这样: df1 <- Date Rainfall_Duration 6/14/2016 10 6/15/2016 20 6/17/2016 10 8/16/2016 30 8/19/2016 40 df2 <- Date Removal.Rate 6/17/2016 64.7 6/30/2016 22.63 7/14/2
df1 <-
Date Rainfall_Duration
6/14/2016 10
6/15/2016 20
6/17/2016 10
8/16/2016 30
8/19/2016 40
df2 <-
Date Removal.Rate
6/17/2016 64.7
6/30/2016 22.63
7/14/2016 18.18
8/19/2016 27.87
df3<-
Rate.Removal.Date Date Rainfall_Duration
6/17/2016 6/14/2016 10
6/17/2016 6/15/2016 20
6/17/2016 6/17/2016 10
6/30/2016 6/14/2016 10
6/30/2016 6/15/2016 20
6/30/2016 6/17/2016 10
7/14/2016 6/14/2016 10
7/14/2016 6/15/2016 20
7/14/2016 6/17/2016 10
8/19/2016 8/16/2016 30
8/19/2016 8/19/2016 40
df1我将通过显式生成所有要收集降雨持续时间的日期,然后绑定来实现这一点
为此,我对每一行进行了split
,并为每一行生成了一个rainfallDate
列,其中包括前七天。然后,我将这些行重新绑定在一起,并使用left\u join
获取降雨数据。最后,我过滤掉缺少降雨信息的行
df2 %>%
split(1:nrow(.)) %>%
lapply(function(x){
data.frame(
x
, rainfallDate = seq(x$Date - 7, x$Date, 1)
)
}) %>%
bind_rows() %>%
left_join(df1, by = c(rainfallDate = "Date")) %>%
filter(!is.na(Rainfall_Duration))
给予
请注意,如果没有降雨信息的日期实际上是0,您可以跳过过滤行,并使用tidyr
中的replace_na
将其设置为显式零(例如,如果您希望平均降雨量或包括之前没有任何降雨的移除日期)
如果您确实对每个日期的汇总值感兴趣(例如,过去七天的总降雨量),则可以使用其他方法。首先,我将生成一个降雨数据集,该数据集实际上包含每天观测的条目。为此,我使用complete
fromtidyr
为每天添加一个明确的零条目,然后使用rollapply
fromzoo
计算前七天滚动的总和
completeRainfall <-
df1 %>%
complete(Date = full_seq(c(as.Date("2016-06-10"), max(Date)), 1)
, fill = list(Rainfall_Duration = 0)) %>%
mutate(prevSeven = rollapply(Rainfall_Duration, 7, sum
, fill = NA, align = "right"))
给予
Date Removal.Rate rainfallDate Rainfall_Duration
1 2016-06-17 64.70 2016-06-14 10
2 2016-06-17 64.70 2016-06-15 20
3 2016-06-17 64.70 2016-06-17 10
4 2016-08-19 27.87 2016-08-16 30
5 2016-08-19 27.87 2016-08-19 40
completeRainfall <-
df1 %>%
complete(Date = full_seq(c(as.Date("2016-06-10"), max(Date)), 1)
, fill = list(Rainfall_Duration = 0)) %>%
mutate(prevSeven = rollapply(Rainfall_Duration, 7, sum
, fill = NA, align = "right"))
left_join(
df2
, completeRainfall
)
Date Removal.Rate Rainfall_Duration prevSeven
1 2016-06-17 64.70 10 40
2 2016-06-30 22.63 0 0
3 2016-07-14 18.18 0 0
4 2016-08-19 27.87 40 70