可重复数据:
df1 <- tibble(id = c("GR1","GR2"),
area = c("A1","A2"),
date1 = as.Date(c("2022-01-01","2022-01-02")),
date2 = as.Date(c("2022-01-06","2022-01-08")))
set.seed(543)
df2 <- tibble(date3 = seq(as.Date("2022-01-01"), as.Date("2022-01-09"), "days"),
temperature =runif(9, min = 28, max = 33),
area = c("A1","A2","A1","A2","A1","A2","A1","A2","A1"))
你好,我希望在df1中创建一列,其中包含在df2筛选后得出的平均温度。(实际数据框中,df1有1036行,df2有26192行。)
我尝试了这种方法,但它并没有像我想象的那样起作用。
df3 <- df1 %>%
group_by(area) %>%
mutate(average_temp = mean(filter(.data = df2, date3 >= df1$date1 & date3 <= df1$date2 & area == df1$area)$temperature))
我收到了这个错误
警告信息:
1: 在计算 average_temp = mean(...)
时出现问题。
i 长对象长度不是短对象长度的倍数
期望的结果是
id | 地区 | 日期1 | 日期2 | 平均气温 |
---|---|---|---|---|
GR1 | A1 | 2022-01-01 | 2022-02-12 | 31.58708 |
GR2 | A2 | 2022-01-02 | 2022-02-11 | 30.50867 |
这段代码本身可以得出期望的结果。因此,问题必须是我在使用 mutate 和 dplyr 语法迭代行的逻辑中没有注意到的东西。
mean(filter(.data = df2, date3 >= df1$date1[2] & date3 <= df1$date2[2] & area == df1$area[2])$temperature)