R 将时间戳数据转换为开始时间和结束时间
我想使用timevis、timeline或其他软件包在R中创建一个时间线,但我需要将数据转换为开始和结束时间才能使用它。目前,我有一个二分法变量,指示活动和时间,如下所示R 将时间戳数据转换为开始时间和结束时间,r,timeline,R,Timeline,我想使用timevis、timeline或其他软件包在R中创建一个时间线,但我需要将数据转换为开始和结束时间才能使用它。目前,我有一个二分法变量,指示活动和时间,如下所示 Name Time Active Joe 0 1 Joe 2 1 Joe 4 0 Joe 6 0 Joe 8 1 Joe 10 1 Beth 0 0 Beth 2
Name Time Active
Joe 0 1
Joe 2 1
Joe 4 0
Joe 6 0
Joe 8 1
Joe 10 1
Beth 0 0
Beth 2 1
Beth 4 1
Beth 6 1
Beth 8 0
Beth 10 1
所以我希望能够将此转换为开始和结束时间,例如
Name StartTime EndTime
Joe 0 4
等等
有人有什么好办法吗?这能让你开始吗
idxRun <- function(df, ...) {
x <- df$Active
times <- df$Time
# take a vector x and return a vector of change indicies.
dif <- diff(x) != 0
idx <- c(TRUE, dif)
dat <- list(
state=x[idx],
time=times[idx]
)
# now neatly arrange the start / stop times.
starts <- dat$time[dat$state == 1]
stops <- dat$time[dat$state == 0 & (dat$time > starts[1])]
# line up the vectors
min.len <- min(c(length(starts), length(stops)))
if(min.len == 0) {
return(data.frame(start.time = NULL, stop.time = NULL))
} else {
return(
data.frame(
start.time = starts[1:min.len],
stop.time = stops[1:min.len])
)
}
}
其中:
dd$Name: Beth
start.time stop.time
1 2 8
-------------------------------------------------------------------------------------------
dd$Name: Joe
start.time stop.time
1 0 4
这能让你开始吗
idxRun <- function(df, ...) {
x <- df$Active
times <- df$Time
# take a vector x and return a vector of change indicies.
dif <- diff(x) != 0
idx <- c(TRUE, dif)
dat <- list(
state=x[idx],
time=times[idx]
)
# now neatly arrange the start / stop times.
starts <- dat$time[dat$state == 1]
stops <- dat$time[dat$state == 0 & (dat$time > starts[1])]
# line up the vectors
min.len <- min(c(length(starts), length(stops)))
if(min.len == 0) {
return(data.frame(start.time = NULL, stop.time = NULL))
} else {
return(
data.frame(
start.time = starts[1:min.len],
stop.time = stops[1:min.len])
)
}
}
其中:
dd$Name: Beth
start.time stop.time
1 2 8
-------------------------------------------------------------------------------------------
dd$Name: Joe
start.time stop.time
1 0 4
Beth的开始和结束时间是多少?这可能会有所帮助。@kmm我认为理想情况下,它应该是从2到8,然后是从10到12(因为12没有测量)。所以Beth应该有两行活动时间。@mikeck这也有帮助-我怀疑dplyr也会有一个很好的方法来做这件事。非常感谢。Beth的开始和结束时间是多少?这可能会有所帮助。@kmm我认为理想情况下,它应该是从2到8,然后是从10到12(因为12没有测量)。所以Beth应该有两行活动时间。@mikeck这也有帮助-我怀疑dplyr也会有一个很好的方法来做这件事。非常感谢。这绝对让我开始-谢谢!它看起来是第一次激活,所以我想也捕捉到Joe从8点一直激活到最后。我想最简单的事情应该是时间12,因为没有“最后”时间,但它也可以让Joe从0到2,从8到10活跃起来。我也非常感谢代码的组织——我仍然习惯于编码,但这有助于我开始理解它。别忘了给服务员小费。:)如果有帮助,记得点击答案旁边的“向上”箭头。如果这是你要找的答案,点击复选标记。谢谢-我现在才意识到它会检查所有活动时间,除了上次,每个人只有一次。是否有一种简单的方法可以捕获最后一个活动时间,比如从Joe的时间8到12(这将结束最后一个时间戳)?通过更改
idx,您可以很容易地获得开始发生的事实,并且结束时间未知。这肯定让我开始-谢谢!它看起来是第一次激活,所以我想也捕捉到Joe从8点一直激活到最后。我想最简单的事情应该是时间12,因为没有“最后”时间,但它也可以让Joe从0到2,从8到10活跃起来。我也非常感谢代码的组织——我仍然习惯于编码,但这有助于我开始理解它。别忘了给服务员小费。:)如果有帮助,记得点击答案旁边的“向上”箭头。如果这是你要找的答案,点击复选标记。谢谢-我现在才意识到它会检查所有活动时间,除了上次,每个人只有一次。有没有一种简单的方法可以捕获最后一个活动时间,比如从Joe的时间8到12(这将结束最后一个时间戳)?通过更改idx,您可以很容易地获得开始发生,结束时间未知的事实