按随机生成的增量 t 按组移动行

Shift rows by group by random generated delta t

这是我的例子 data.frame:

df = read.table(text = 'ID Day
101 0
101 0
101 1
300 40
300 40
270 32
270 35
100 1450
100 1450
100 1451
72 1490
72 1499', header = TRUE)

假设每个Day obs代表一个真实的日期,并且时间段范围从Day = 0到Day = 1500,我需要移动每个ID 按随机数量 Day(delta t)分组,特定于每个组,如果 Day 值超过 1500,则从 0 重新开始。

例如101组30天,300组70天,270组1000天,100组100天,72组5天

这是我想要的输出:

     ID Day
    101 30
    101 30
    101 31
    300 110
    300 110
    270 1032
    270 1035
    100 1550
    100 1550
    100 1551
    72 1495
    72 3

请注意,每组 Day 的变化必须是随机的。

任何帮助将不胜感激。

谢谢

这将为每天添加一个 0 到 1000 之间的随机整数 - 您可以根据需要调整 sample 的范围。

library(dplyr)

set.seed(123)

df2 <- df %>%
  group_by(ID) %>%
  mutate(Day = (Day + sample(1:1000, 1)) %% 1500)

df2      
# ID   Day
# 101   409
# 101   409
# 101   410
# 300   981
# 300   981
# 270   916
# 270   919
# 100   739
# 100   739
# 100   740
# 72   278
# 72   287
library(dplyr)

set.seed(123)

df2 <- df %>%
  group_by(ID) %>%
  mutate(Day = (Day + sample(1:1000, 1)) %% 1500)