我的样本数据包括1981年和1982年从第一天到365天的每日降雨量和温度
set.seed(0)
df <- data.frame(year = rep(1981:1982, each = 365),
doy = rep(1:365, times = 2),
rainfall = sample(0:30, 730, replace = T),
tmax = sample(25:35, 730, replace = T))
每年我都有两天
ref.doy
,我有相应的
doy.first
doy.second
.
my.df <- data.frame(year = c(1981, 1981, 1982, 1982),
ref.doy = c(250, 260, 230, 240),
doy.first = c(280, 300, 290, 310),
doy.second = c(310, 330, 340, 350))
我想做的是每年第一次
以及相应的
先打瞌睡
,
好的。第二
计算总降雨量和平均气温
ref.doy:doy.first
和
doy.first:
好的。第二`. 为此我编写了一个函数:
my.func <- function(x) {
dat <- x %>%
dplyr::summarise(tot.rain.val1 = sum(rainfall[doy >= ref.doy & doy <= doy.first]),
tot.rain.val2 = sum(rainfall[doy >= doy.first & doy <= doy.second]),
mean.tmax.val1 = mean(tmax[doy >= ref.doy & doy <= doy.first]),
mean.tmax.val2 = sum(tmax[doy >= doy.first & doy <= doy.second]))
return(dat)
}
我采用的方法是首先连接两个数据,然后运行我的函数
df <- df %>% left_join(my.df)
results <- df %>% dplyr::group_by(year, ref.doy) %>%
dplyr::summarise(results = paste(my.func(.), collapse = ","))
results
按以下格式
year ref.doy tot.rain.val1 tot.rain.val2 mean.tmax.val1 mean.tmax.val2
1981 250
1981 260
1982 230
1982 240