gpt4 book ai didi

r - 填充日期时间序列

转载 作者:行者123 更新时间:2023-12-04 12:44:08 27 4
gpt4 key购买 nike

我有一个由 ID、日期时间和值组成的 data.frame。对于每个 ID,我想扩展 DateTimes,以便在最小值和最大值之间每小时有一个。 ID 和 Value 列应填充它们各自的值(即不是 NA)。永远不会出现每个 ID 有多个唯一值的情况。例如,新的 data.frame 应该有 4 行 ID == 1 和 5 行 ID == 2(共 9 行)。什么是最简单的方法来做到这一点?

我通常使用 dplyr,因此会接受 base 或 dplyr/tidyverse 方法

library(dplyr)
library(lubridate)

dt <- Sys.time() %>% floor_date('hours')
df <- data.frame(ID = c(1, 1, 2, 2),
DateTime = c(dt, dt + hours(3), dt + hours(6), dt + hours(9)),
Value = c(3, 3, 4, 4))

预期输出是:
output <- data.frame(ID = c(1, 1, 1, 1, 2, 2, 2, 2), 
DateTime = c(dt, dt + hours(1), dt + hours(2), dt + hours(3),
dt + hours(6), dt + hours(7), dt + hours(8), dt + hours(9)),
Value = c(3, 3, 3, 3, 4, 4, 4, 4))

ID DateTime Value
1 1 2018-03-27 19:00:00 3
2 1 2018-03-27 20:00:00 3
3 1 2018-03-27 21:00:00 3
4 1 2018-03-27 22:00:00 3
5 2 2018-03-28 01:00:00 4
6 2 2018-03-28 02:00:00 4
7 2 2018-03-28 03:00:00 4
8 2 2018-03-28 04:00:00 4

最佳答案

我们可以使用 complete来自 tidyr

library(tidyverse)
df %>%
group_by(ID, Value) %>%
complete(DateTime = seq(min(DateTime), max(DateTime), by = "1 hour")) %>%
select(names(df))

关于r - 填充日期时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49525320/

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