gpt4 book ai didi

r - 使用 R 计算剧集/事件的长度

转载 作者:行者123 更新时间:2023-12-01 08:36:40 24 4
gpt4 key购买 nike

我只是想知道是否有人可以建议我应该如何使用 r 进行以下计算?

我有一个一年的每小时数据集,包含 3 列,“date”“time”和“values

例如:

'01/01/2000'     '08:00'     '10'     
'01/01/2000' '09:00' '30'
'01/01/2000' '10:00' '43'
'01/01/2000' '11:00' '55'
'01/01/2000' '12:00' '59'
'01/01/2000' '13:00' '45'
'01/01/2000' '14:00' '10'
'01/01/2000' '15:00' '15'
'01/01/2000' '16:00' '43'
'01/01/2000' '17:00' '45'
'01/01/2000' '18:00' '60'
'01/01/2000' '19:00' '10'

我想创建一个 data.frame 来计算值 > 40 的剧集长度,并在可能的情况下用开始日期和时间显示它,例如从上表中第一次出现超过 10: 00am 持续 4 小时,第二次发生在 16:00 持续 3 小时,所以我想知道是否可以创建如下数据框?

     'date'      'time'    'Duration'  
'01/01/2000' '10:00' '4'
'01/01/2000' '16:00' '3'

对于年度数据集以此类推

最佳答案

这是另一个依赖于 plyr 的解决方案:它使计算其他数量变得更容易在每个大于 40 的值上,例如平均值或最大值。

# Sample data
k <- 3
d <- data.frame(
date = rep( seq.Date( Sys.Date(), length=k, by="day" ), each=24 ),
time = sprintf( "%02d:00", rep( 0:23, k ) ),
value = round(200*runif(24*k))
)
d$timestamp <- as.POSIXct( paste( d$date, d$time ) )
d <- d[ order( d$timestamp ), ]
# Extract the spells above 40
n <- nrow(d)
d$inside <- d$value > 40
d$start <- ! c(FALSE, d$inside[-n]) & d$inside
d$end <- d$inside & ! c(d$inside[-1], FALSE) # Not used
d$group <- cumsum(d$start) # Number the spells
d <- d[ d$inside, ]
library(plyr)
ddply( d, "group", summarize,
start = min(timestamp),
end = max(timestamp),
length = length(value),
mean = mean(value)
)

值超过 40 的法术可以跨越几天:这可能是也可能不是你想要的。

关于r - 使用 R 计算剧集/事件的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com