【发布时间】:2022-02-15 06:21:32
【问题描述】:
可重现的数据:
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 | area | date1 | date2 | average_temp |
|---|---|---|---|---|
| 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)
【问题讨论】:
标签: r dataframe date merge mean