滚动总结以另一个数据帧上的多个变量为条件

2024-01-12

我有以下数据示例:

trap_data <- structure(list(site = c(1, 2, 3, 3), trap_date = structure(c(18809, 
18809, 18307, 18322), class = "Date")), class = "data.frame", row.names = c(NA, 
-4L))

climate <- structure(list(site = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), 
    V1 = c(0.1, 0.2, 0.1, 0.1, 0.5, 0.2, 0.3, 0.1, 0.2, 0.1, 
    0.1, 0.5), V2 = c(1, 1, 3, 1, 2, 3, 3, 1, 1, 3, 1, 2), date = structure(c(18779, 
    18790, 18789, 18792, 18791, 18790, 18789, 18792, 18305, 18306, 
    18307, 18308), class = "Date")), class = "data.frame", row.names = c(NA, 
-12L))

我会在 trap_data 中添加列,总结气候数据 V1 和 V2 的 N、平均值和总和,并以地点和日期为条件。但是,我希望这些新变量(N、平均值和总和)适用于 trap_data 中指定日期之前的 N 天(这些时间长度是可变的。例如当前的 20 天)。

Thanks,


我们可以在“trap_data”中创建一个新列 - 20 天前的日期,然后进行联接

library(data.table)
library(lubridate)
setDT(trap_data)[, prev_date := trap_date - days(20)]
setDT(climate)[trap_data, .(N = .N,
     MeanV1 = mean(V1, na.rm = TRUE),
     SumV1 = sum(V1, na.rm = TRUE),
     MeanV2 = mean(V2, na.rm = TRUE),
  SumV2 = sum(V2, na.rm = TRUE)),
   on = .(site, date >= prev_date, date <= trap_date), by = .EACHI]

-output

    site       date       date     N    MeanV1 SumV1   MeanV2 SumV2
   <num>     <Date>     <Date> <int>     <num> <num>    <num> <num>
1:     1 2021-06-11 2021-07-01     3 0.1333333   0.4 1.666667     5
2:     2 2021-06-11 2021-07-01     4 0.2750000   1.1 2.250000     9
3:     3 2020-01-26 2020-02-15     3 0.1333333   0.4 1.666667     5
4:     3 2020-02-10 2020-03-01     4 0.2250000   0.9 1.750000     7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滚动总结以另一个数据帧上的多个变量为条件 的相关文章

随机推荐