按随机生成的增量 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)
这是我的例子 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)