这是我的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开始。
e.g。组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 :(得分:2)
这将在每天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
答案 1 :(得分:0)
library(dplyr)
set.seed(123)
df2 <- df %>%
group_by(ID) %>%
mutate(Day = (Day + sample(1:1000, 1)) %% 1500)