gpt4 book ai didi

r - 以日历日为单位分割间隔的持续时间

转载 作者:行者123 更新时间:2023-12-02 14:51:28 26 4
gpt4 key购买 nike

我有以下数据集,显示剧集的开始和结束(日期和时间)

ep <- data.frame(start=c("2009-07-13 23:45:00", "2009-08-14 08:30:00", 
"2009-09-16 15:30:00"),
end=c("2009-07-14 00:03:00", "2009-08-15 08:35:00",
"2009-09-19 07:30:00"))

我需要将其转换为一个数据框,该数据框将显示每个日历日有多少分钟的剧集。对于上面的例子,它是:

2009-07-13  15
2009-07-14 3
2009-08-14 930
2009-08-15 515
2009-09-16 510
2009-09-17 1440
2009-09-18 1440
2009-09-19 450

感谢您的帮助

最佳答案

这可行,但看起来有点不优雅。首先,创建一个向量,该向量是每个开始时间和结束时间之间以分钟为单位的时间序列:

tmp <- do.call(c, apply(ep, 1, 
function(x) head(seq(from = as.POSIXct(x[1]),
to = as.POSIXct(x[2]),by = "mins"),
-1)))

我们使用 head(...., -1) 从每个序列中删除最后一分钟,以便分钟与您想要的相符。

接下来,将此向量分割为每天发生的分钟数,并计算每天有多少分钟:

tmp <- sapply(split(tmp, format(tmp, format = "%Y-%m-%d")), length)

请注意,由于某种原因(可能与时区相关),我们不能仅使用 as.Date(tmp) 来获取日期向量,我们需要显式地将时间格式化为仅显示日期部分。

最后一步是将包含我们需要的所有内容的 tmp 对象排列成您请求的格式:

mins <- data.frame(Date = names(tmp), Minutes = tmp, row.names = NULL)

这给出:

> mins
Date Minutes
1 2009-07-13 15
2 2009-07-14 3
3 2009-08-14 930
4 2009-08-15 515
5 2009-09-16 510
6 2009-09-17 1440
7 2009-09-18 1440
8 2009-09-19 450

关于r - 以日历日为单位分割间隔的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154060/

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