r语言 - 如何在不使用as的情况下从这个目录中获得一个表?日期函数?



我需要转换几个"tibble"到"tsibble".

这里有一个简单的例子:

require(tidyverse)
require(lubridate)
time_1 <- c(ymd_hms('20210101 000000'),
ymd_hms('20210101 080000'),
ymd_hms('20210101 160000'),
# ymd_hms('20210102 000000'),
ymd_hms('20210102 080000'),
ymd_hms('20210102 160000'))
df_1 <- tibble(time_1, y=rnorm(5))
df_1 %>% 
as_tsibble(index=time_1)

这段代码按预期工作。但是,如果日期都是午夜,这段代码抛出一个错误:

time_2 <- c(ymd_hms('20210101 000000'),
ymd_hms('20210102 000000'),
ymd_hms('20210103 000000'),
# ymd_hms('20210104 000000'),
ymd_hms('20210105 000000'),
ymd_hms('20210106 000000'))
df_2 <- tibble(time_2, y=rnorm(5))
df_2 %>% 
as_tsibble(index=time_2)

我不想用这种方式解决这个问题,因为as.Date函数改变了列类型。

df_2 %>% 
mutate(time_2=as.Date(time_2)) %>% 
as_tsibble(index=time_2)

我也不想以这种方式解决问题,因为在将tibble转换为表之后,我需要应用fill_gaps函数,这不会在第二个场景中创建ymd_hms('20210104 000000')

df_2 %>% 
as_tsibble(index=time_2, regular=FALSE)

这是一个bug吗?

谢谢。

此行为在table的FAQ中有解释。

基本上每天午夜测量的亚日数据(ymd_hms())不一定间隔1天(24小时)。考虑到有些日子由于您所在时区的夏令时而发生了变化,因此从午夜到第二天午夜之间的小时数可能是23或25小时。

如果您正在处理以每日间隔测量的数据,则应该使用具有ymd()精度的日期。如果您愿意,可以使用as_datetime()将其转换回日期时间。

我个人认为这应该不会产生错误,但是如果它产生错误会简单得多。这里合适的时间间隔可能是1小时或30分钟(或者在指定的时区中适合时区转换的任何时间)。

相关内容

  • 没有找到相关文章

最新更新