我需要创建一个变量,统计每个id在过go 30天内发生的观察次数.

例如,想象2021年1月2日(d/m/y)发生的id为"a"的观测.如果这是id"a"在2021年1月1日至2021年1月2日之间的首次观测,则变量必须为1.如果是第二个,则为2,以此类推.

下面是一个更大的例子:

dat <- tibble::tribble(
  ~id,  ~q,   ~date,
  "a",   1,   "01/01/2021",
  "a",   1,   "01/01/2021",
  "a",   1,   "21/01/2021",
  "a",   1,   "21/01/2021",
  "a",   1,   "12/02/2021",
  "a",   1,   "12/02/2021",
  "a",   1,   "12/02/2021",
  "a",   1,   "12/02/2021",
  "b",   1,   "02/02/2021",
  "b",   1,   "02/02/2021",
  "b",   1,   "22/02/2021",
  "b",   1,   "22/02/2021",
  "b",   1,   "13/03/2021",
  "b",   1,   "13/03/2021",
  "b",   1,   "13/03/2021",
  "b",   1,   "13/03/2021")
dat$date <- lubridate::dmy(dat$date)

结果应该是:

id  q   date    newvar
a   1   01/01/2021  1
a   1   01/01/2021  2
a   1   21/01/2021  3
a   1   21/01/2021  4
a   1   12/02/2021  3
a   1   12/02/2021  4
a   1   12/02/2021  5
a   1   12/02/2021  6
b   1   02/02/2021  1
b   1   02/02/2021  2
b   1   22/02/2021  3
b   1   22/02/2021  4
b   1   13/03/2021  3
b   1   13/03/2021  4
b   1   13/03/2021  5
b   1   13/03/2021  6

非常感谢你.

推荐答案

使用sapplybetween,计算30天内当前观察之前的观察次数.

library(lubridate)
library(dplyr)
dat %>% 
  group_by(id) %>% 
  mutate(newvar = sapply(seq(length(date)), 
                         function(x) sum(between(date[1:x], date[x] - days(30), date[x]))))

# A tibble: 16 x 4
# Groups:   id [2]
   id        q date       newvar
   <chr> <dbl> <date>      <int>
 1 a         1 2021-01-01      1
 2 a         1 2021-01-01      2
 3 a         1 2021-01-21      3
 4 a         1 2021-01-21      4
 5 a         1 2021-02-12      3
 6 a         1 2021-02-12      4
 7 a         1 2021-02-12      5
 8 a         1 2021-02-12      6
 9 b         1 2021-02-02      1
10 b         1 2021-02-02      2
11 b         1 2021-02-22      3
12 b         1 2021-02-22      4
13 b         1 2021-03-13      3
14 b         1 2021-03-13      4
15 b         1 2021-03-13      5
16 b         1 2021-03-13      6

R相关问答推荐

extract()函数不处理stanfit对象,我用错了吗?

逐行替代引用前一行的for循环

将带有范围的字符串转换为R中的数字载体

在R中列表的结尾添加数字载体

计算R中的威布尔分布的EDF

查找图下的面积

抖动点与嵌套类别变量箱形图的位置不对齐

bslib::card_header中的shine::downloadButton,图标而不是文本

如何根据R中其他列的值有条件地从列中提取数据?

如何同时从多个列表中获取名字?

用约翰逊分布进行均值比较

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

从多层嵌套列表构建Tibble?

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

Geom_arcbar()中出错:找不到函数";geom_arcbar";

在点图上绘制置信度或预测区间ggplot2

在ggploy中创建GeV分布时出错

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

使用R、拼图和可能的网格包绘制两个地块的公共垂直线