R语言 我需要这个问题的代码“差距填补”时间序列

yh2wf1be  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(102)

我有这里的例子中提供的每日时间序列,我需要知道如何填补NA值只为上午时间是从6:00上午到9:00上午,该差距填补它应该是通过平均剩余小时数的同一天,等等,为另一个上午,

set.seed(3)
df <- data.frame( timestamp = seq(as.POSIXct('2022-01-01', tz='utc'),as.POSIXct('2022-01-10 23:00', tz='utc'), by = '1 hour') ,
                  value = runif(240))
df$value[runif(nrow(df)) < 0.3] <- NA
68de4m5k

68de4m5k1#

如果我没理解错的话,这是解决dplyr中任务的一种方法:

df %>% 
    dplyr::mutate(after = ifelse(lubridate::hour(timestamp) > 10, value, NA), 
                  day = format(df$timestamp, format = '%Y-%m-%d')) %>% 
    dplyr::group_by(day) %>% 
    dplyr::mutate(value = ifelse(lubridate::hour(timestamp) <10 & is.na(value), mean(after, na.rm = TRUE), value)) %>% 
    dplyr::ungroup() %>% 
    dplyr::select(-after, -day)

# A tibble: 240 x 2
   timestamp           value
   <dttm>              <dbl>
 1 2022-01-01 00:00:00 0.427
 2 2022-01-01 01:00:00 0.808
 3 2022-01-01 02:00:00 0.385
 4 2022-01-01 03:00:00 0.427
 5 2022-01-01 04:00:00 0.602
 6 2022-01-01 05:00:00 0.604
 7 2022-01-01 06:00:00 0.125
 8 2022-01-01 07:00:00 0.295
 9 2022-01-01 08:00:00 0.578
10 2022-01-01 09:00:00 0.631
# ... with 230 more rows
# i Use `print(n = ...)` to see more rows
bnlyeluc

bnlyeluc2#

天后的时间戳值
1 2022年1月1日00:00:00不适用不适用00
2 2022年1月1日01时00分0.808不适用01
3 2022年1月1日02时00分0.385不适用02
4 2022年1月1日03:00:00不适用不适用03
5 2022年1月1日04时00分0.602不适用04
6 2022年1月1日05时00分0.604不适用05
7 2022年1月1日06:00:00 0.125不适用06
8 2022年1月1日07时00分0.295不适用07
9 2022年1月1日08时00分0.578不适用08
10 2022年1月1日09时00分0.631不适用09

...多了230行

i使用print(n = ...)查看更多行

相关问题