R:从一定数量的连续观测中随机取样不同的时间段,没有重叠

问题描述

我的数据集包含许多ID,每个ID至少包含100个观察值,每个日期包含一个观察值。 ID之间的日期重叠。请参阅下面的带有10个ID的虚假数据集:

id = 10
m   = 2 * id
a_0 = seq(as.Date("2001-01-01"),as.Date("2001-12-31"),by = "day")
a_1 = matrix(sort(sample(as.character(a_0),m)),nc = 2)
a_2 = list()
for(i in 1:nrow(a_1)){
 a_3 = seq(as.Date(a_1[i,1]),as.Date(a_1[i,2]),by = "day")
 a_4 = data.frame(i,as.character(a_3),round(runif(length(a_3),1)))
 colnames(a_4) = c("id","date","value")
 a_2[[i]] = a_4
}
DF = dplyr::bind_rows(a_2)
dim(DF)
table(DF[,1])

对于每个ID,我想随机抽取固定天数内的连续观测值,类似于此处的要求:Sample n consecutive dates from a random starting date for each index in a data frame。因此,例如(连续10天):

library(dplyr)

df.sample <- arrange(DF,date) %>% 
 group_by(id) %>% 
 mutate(date = as.Date(date),start = sample(date,1)) %>% 
 filter(date >= start & date <= (start + 9))

但是,我需要为每个ID随机采样不同的时间段:2 x 10天和1 x 25天。 另外,在一个ID中,采样的时间段不能彼此重叠,即,对于相同的ID,同一日期不能采样两次。

最重要的是,不应采样每个ID的第一个和最后一个观察值。最后,在采样的时间间隔之间应至少有1个观测值。

我努力寻找一个包含所有这些约束的简单解决方案。一些帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)