按组随机生成的delta t移动行

时间:2017-05-08 16:01:04

标签: r random dataframe rows shift

这是我的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的转变必须是随机的。

任何帮助都会非常感激。

由于

2 个答案:

答案 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)