(很抱歉,如果这里的某些术语不适用,我来自SQL背景,而我只是进入R世界)
我有一个带有一系列按日期排序的条目的数据表。数据表中的字段之一是分组值,一个是时间值。在按组对数据进行排序(或键入键-我是R的新手,但仍然不确定之间的差异)之后,我要计算日期,对于每一行,该组中的行中有多少行在当前行之前(包括在当前时间段内)。
这是我使用Loblolly数据集尝试做的简化示例:
准备示例数据:
library(lubridate)
library(zoo)
library(data.table)
DT = as.data.table(Loblolly)
DT[,rd := Sys.time() + years(age)]
setkey(DT,Seed,rd)
Run Code Online (Sandbox Code Playgroud)
现在,我们有了一个按种子(组)和rd(我的日期列)排序的数据表。我有一个解决方案,它将以10年为间隔产生我的计数值(ct):
DT[,.ct:=mapply(function(x,y) DT[(rd>x-years(10) & rd<=x &Seed==y),.N],DT$rd,DT$Seed)]
Run Code Online (Sandbox Code Playgroud)
这将在此示例数据集中产生所需的结果:
height age Seed rd ct
1: 3.93 3 329 2019-03-01 13:38:00 1
2: 9.34 5 329 2021-03-01 13:38:00 2
3: 26.08 10 329 2026-03-01 13:38:00 3
4: 37.79 15 329 2031-03-01 13:38:00 2
5: 48.31 20 329 2036-03-01 13:38:00 2
6: 56.43 25 329 2041-03-01 13:38:00 2
7: 4.12 3 327 2019-03-01 13:38:00 1
8: 9.92 5 …Run Code Online (Sandbox Code Playgroud)