寻找R代码,根据同一行中包含的一系列可能值,对跨行的变量求和



我使用的是一个简单的数据集。它包含三个感兴趣的变量。1.日期YYYY-MM-DD 2。每小时(##(3。沉淀_H(#.##(.

我的情况是,我试图找到代码,例如,将等于特定DATE且Hourly值在00-11范围内的行之间的precip_H值求和。然后,下一盘也会做同样的事情,但在《小时》中的范围是12-23。

该数据集是一个每小时报告降水量的气象站。我试图做的是使用这些信息在数据集的所有日子里每天生成两个12小时的降水量值。

DATE       TIME  PRECIP_H DATEyyyy DATEmm DATEdd
<date>     <chr>    <dbl>    <dbl>  <dbl>  <dbl>
1 2019-06-05 17           0     2019      6      5
2 2019-06-01 20           0     2019      6      1
3 2019-06-06 19           0     2019      6      6
4 2019-05-27 00           0     2019      5     27
5 2019-08-25 20           0     2019      8     25
6 2019-08-08 04           0     2019      8      8
7 2019-09-01 07           0     2019      9      1
8 2019-07-18 21           0     2019      7     18
9 2019-06-18 23           0     2019      6     18
10 2019-08-11 12           0     2019      8     11
library(readxl)
precip2019 <- Clean_Chicago_Midway_Precp_Hourly_2019_1945790 <- read_excel("S:/Natural Resources/Staff/Beach Management/Beaches Main/+ DATA ANALYSIS +/Beaches 2019/Master Files/Clean_Chicago Midway Precp Hourly 2019_1945790.xlsx")

names(precip2019)[names(precip2019) == "HourlyPrecipitation"] <- "PRECIP_H"

precip2019$DATE <- as.Date(precip2019$DATE, format = '%Y-%m-%d')
precip2019$DATEyyyy <- as.numeric(format(precip2019$DATE, '%Y'))
precip2019$DATEmm <- as.numeric(format(precip2019$DATE, '%m'))
precip2019$DATEdd <- as.numeric(format(precip2019$DATE, '%d'))
prec_sum <- precip2019 %>% 
select(DATE, TIME, starts_with("PREC")) %>% 
mutate(Period = case_when(between(TIME, 0, 11) ~ "1st_half",
TRUE ~ "2nd_half")) %>% 
group_by(DATE, Period) %>% 
summarise_at(vars(starts_with("PREC")), list(~ sum(., na.rm = TRUE))) %>% 
ungroup()
View(prec_sum) 

这可能适用于您的案例。首先,我们需要根据时间范围(case_when(创建一个Period列。然后基于一组两列DATEPeriod(summarise_at(进行求和。

library(dplyr)
prec_sum <- prec_data %>% 
select(DATE, TIME, starts_with("PREC")) %>% 
mutate(TIME = as.numeric(TIME)) %>% 
mutate(Period = case_when(between(TIME, 0, 11) ~ "1st_half",
TRUE ~ "2nd_half")) %>% 
group_by(DATE, Period) %>% 
summarise_at(vars(starts_with("PREC")), list(~ sum(., na.rm = TRUE))) %>% 
ungroup()