rstudio - 计算 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 并没有太大帮助。
谢谢!
解决方案
解决。
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。
推荐阅读
- python - TypeError:需要一个类似字节的对象,而不是“str”(尝试连接到 Essbase)
- python - 更新数据框列的有效方法
- qt - 为什么不能在 ColumnLayout 中使用 ScrollView?
- json - 动态创建一个从我的本地 JSON 文件夹中获取数据的配置文件页面
- python - 写入 csv 并上传到 S3 的 Lambda 函数
- php - 尝试使用 php 和 ajax 和 jquery 上传图像时出现 500 错误
- ios - IBOutlet Autolayout 约束常量变化
- sql-server - 如何根据作业名称批量更新 SQL Server 代理作业重试尝试
- django - 你能用 formset 管理两个离散的表单吗?
- python - ValueError:发现样本数量不一致的输入变量:[29675、9574、29675]