我正在尝试编写一个程序,将状态从 A 设置为状态 B,反之亦然。
rnumbers <- data.frame(replicate(5,runif(2000, 0, 1)))
我正在想象这个均匀分布的随机数数据框,除了它有 10000 行而不是 20 行。
设置进入状态 A 和状态 B 的概率:
dt <- c(.02)
A <- dt*1
B <- dt*.5
创建一个遍历数据帧 rnumbers 的函数,如果数字小于 B,则输入 0,如果数字小于 A,则输入 1。
step_generator <- function(x){
step <- ifelse ( x < B, 0, ifelse(x < A, 1, NA))
return(step)
}
state <- apply(rnumbers, 2, step_generator)
这基本上给了我我想要的 - 一个数据框,其列包含 0、1 或 NA,具体取决于 rnumbers 中随机数的值。但是,我错过了几件事-
1)我想跟踪每个状态持续多长时间。我的意思是,如果你把每一行想象成上面的时间变化(dt <- c(.02)
)。我希望能够绘制“状态与时间”。为了解决这个问题,这是我尝试过的:
state1 <- transform(state, time = rep(dt))
state2 <- transform(state1, cumtime = cumsum(time))
这让我接近我想要的,cumtime 从 0.02 到 0.4。但是,我希望时钟从第一行的 0 开始,并将 .02 添加到每个后续行。
2)我需要知道每个状态持续多长时间。本质上,我希望能够浏览每一列,并询问每个状态持续多长时间(cumsum)。然后,这将为我提供状态 A 和状态 B 的时间分布。我希望将其存储在另一个数据框中。
我认为这是有道理的,如果有任何不清楚的地方,请告诉我,我会澄清。
感谢您的任何帮助!