计算 1,000 列事件之间的天数差异
Calculate diff in days between events for 1,000 columns
我正在尝试测试我的真实世界数据在假设概率分布中的位置。我创建了一个 1000 随机 Var 的 DF,并对其重新编码以匹配我的真实世界事件的概率。
接下来我要计算 "time between Events"(IE,每个 1 发生之间的时间),然后存储每个随机变量的事件之间的平均时间,以便我可以绘制它。 (最终目标是 1000 个均值的 1 个变量)
下面的代码我创建了随机变量,重新编码它们,并添加了一个日期范围。
dat <-as.data.frame( matrix (0, nr=1303, nc = 1000))
for (i in 1:1000){x<- runif(1303)
dat[,i] <-x}
#calculating values to 0,1.
dat[,] <- ifelse(dat[,] < "0.01611665", 1, ifelse(dat[,] > "0.01611665", 0, 1 ))
#creating date range
start_date <- as.Date("2016/10/10")
Date<- seq(start_date, by = "day", length.out = 1303)
#add date vector to a df
dat$date <- Date
我不确定如何计算所有变量的事件之间的时间。我已经在下面的代码中为我的真实世界数据(1303 天内只有 21 个事件)完成了它,但我不确定如何缩放它以应用于所有 1000 个随机变量,或者如何提取 1000 个均值 "time between events" 到一个单独的 df.
events <- sort(sample(never1$date1, 21))
d <- c(NA, diff(events))
我知道我的解决方案涉及 lubridate 和 dplyr 以及滚动计算。但是我的 googleFU 帮不上什么忙。
谢谢!
已解决。
dat <- as.data.frame( matrix(0, nr=1303, nc = 1000) )
#Generate random numbers
for (i in 1:1000){
x<- runif(1303)
dat[,i] <-x
}
#Split random numbers into zero and ones at the desired prevalence
dat[,] <- ifelse(dat[,] < "0.01611665", 1, ifelse(dat[,] > "0.01611665", 0, 1 ) )
length(dat[,1])
plot.df <- as.data.frame(matrix(0, nr = 1000, nc = 3))
colnames(plot.df) <- c("Mean","Sd","Median")
#Check the run length encoding
for (i in 1:1000){
runs <- rle(dat[,i])
#Check the length of runs
runs$lengths
#Remove the incident days and leave the length of 'no incident' runs
noinc.days <- runs$lengths[which(runs$lengths > 1)]
plot.df[i,1] <- mean(noinc.days)
plot.df[i,2] <- sd(noinc.days)
plot.df[i,3] <- median(noinc.days)
后跟适当的 GGplots。
我正在尝试测试我的真实世界数据在假设概率分布中的位置。我创建了一个 1000 随机 Var 的 DF,并对其重新编码以匹配我的真实世界事件的概率。
接下来我要计算 "time between Events"(IE,每个 1 发生之间的时间),然后存储每个随机变量的事件之间的平均时间,以便我可以绘制它。 (最终目标是 1000 个均值的 1 个变量)
下面的代码我创建了随机变量,重新编码它们,并添加了一个日期范围。
dat <-as.data.frame( matrix (0, nr=1303, nc = 1000))
for (i in 1:1000){x<- runif(1303)
dat[,i] <-x}
#calculating values to 0,1.
dat[,] <- ifelse(dat[,] < "0.01611665", 1, ifelse(dat[,] > "0.01611665", 0, 1 ))
#creating date range
start_date <- as.Date("2016/10/10")
Date<- seq(start_date, by = "day", length.out = 1303)
#add date vector to a df
dat$date <- Date
我不确定如何计算所有变量的事件之间的时间。我已经在下面的代码中为我的真实世界数据(1303 天内只有 21 个事件)完成了它,但我不确定如何缩放它以应用于所有 1000 个随机变量,或者如何提取 1000 个均值 "time between events" 到一个单独的 df.
events <- sort(sample(never1$date1, 21))
d <- c(NA, diff(events))
我知道我的解决方案涉及 lubridate 和 dplyr 以及滚动计算。但是我的 googleFU 帮不上什么忙。
谢谢!
已解决。
dat <- as.data.frame( matrix(0, nr=1303, nc = 1000) )
#Generate random numbers
for (i in 1:1000){
x<- runif(1303)
dat[,i] <-x
}
#Split random numbers into zero and ones at the desired prevalence
dat[,] <- ifelse(dat[,] < "0.01611665", 1, ifelse(dat[,] > "0.01611665", 0, 1 ) )
length(dat[,1])
plot.df <- as.data.frame(matrix(0, nr = 1000, nc = 3))
colnames(plot.df) <- c("Mean","Sd","Median")
#Check the run length encoding
for (i in 1:1000){
runs <- rle(dat[,i])
#Check the length of runs
runs$lengths
#Remove the incident days and leave the length of 'no incident' runs
noinc.days <- runs$lengths[which(runs$lengths > 1)]
plot.df[i,1] <- mean(noinc.days)
plot.df[i,2] <- sd(noinc.days)
plot.df[i,3] <- median(noinc.days)
后跟适当的 GGplots。