首页 > 解决方案 > 计算 1,000 列的事件之间的天数差异

问题描述

我正在尝试测试我的真实世界数据落在假设概率分布上的位置。我创建了一个 1000 随机 Var 的 DF 并重新编码以匹配我的真实世界事件的概率。

接下来我想计算“事件之间的时间”(IE,每次发生之间的时间),然后存储每个随机变量的事件之间的平均时间,以便我可以绘制它。(最终目标是 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 个平均“事件之间的时间” "到一个单独的df。

 events <- sort(sample(never1$date1, 21))
    d <- c(NA, diff(events))

我知道我的解决方案涉及 lubridate 和 dplyr 以及滚动计算。但我的 googleFU 并没有太大帮助。

谢谢!

标签: rstudiodata-science

解决方案


解决。

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。


推荐阅读