从 lubridate 使用 parse_date_time() 解析的日期在与 tibble 合并时丢失其格式

Date parsed with parse_date_time() from lubridate loses its format when merged with tibble

我正在抓取一个网站并尝试将某些文本格式化为日期。抓取和格式代码工作正常,但是当我尝试将日期列与其余数据合并时,它会丢失其日期格式和类型。我不知道如何修复它,也找不到任何相关信息。

可重现的例子:

library(tidyverse)
library(lubridate)

test_dates <- c("Sunday, Nov 15, 2020", "Monday, Nov 16, 2020", "Thursday, Nov 19, 2020", "Sunday, Nov 22, 2020", "Monday, Nov 23, 2020"  )
dates <- parse_date_time(test_dates, "AbdY")
glimpse(dates)

x1 <- rnorm(5)
x2 <- rnorm(5)

mydata <- as_tibble(cbind(dates, x1, x2))
glimpse(mydata)

mydata <- as_tibble(cbind(as_date(dates), x1, x2))
glimpse(mydata)

这给出了以下输出:

> library(tidyverse)
> library(lubridate)
> test_dates <- c("Sunday, Nov 15, 2020", "Monday, Nov 16, 2020", "Thursday, Nov 19, 2020", "Sunday, Nov 22, 2020", "Monday, Nov 23, 2020"  )

> dates <- parse_date_time(test_dates, "AbdY")
> glimpse(dates)
 POSIXct[1:5], format: "2020-11-15" "2020-11-16" "2020-11-19" "2020-11-22" "2020-11-23"

> x1 <- rnorm(5)
> x2 <- rnorm(5)

> mydata <- as_tibble(cbind(dates, x1, x2))
> glimpse(mydata)
Rows: 5
Columns: 3
$ dates <dbl> 1605398400, 1605484800, 1605744000, 1606003200, 1606089600
$ x1    <dbl> -0.1142434, -0.1638176, -0.8392169, 1.2231866, -1.3134138
$ x2    <dbl> -0.6944343, -0.2210215, 1.0754251, -0.4685189, -0.2033346

> mydata <- as_tibble(cbind(as_date(dates), x1, x2))
> glimpse(mydata)
Rows: 5
Columns: 3
$ V1 <dbl> 18581, 18582, 18585, 18588, 18589
$ x1 <dbl> -0.1142434, -0.1638176, -0.8392169, 1.2231866, -1.3134138
$ x2 <dbl> -0.6944343, -0.2210215, 1.0754251, -0.4685189, -0.2033346

正如您在最后看到的那样,变量恢复为双精度而不是保持以前的 POSIXct 或任何其他与日期相关的格式。有什么建议吗?

我们可以直接在数据集上使用tibbledata.frame

tibble(dates, x1, x2)

或者

data.frame(dates, x1, x2)

而不是 cbind 因为 cbind 转换为 matrix 并且矩阵只能有一个类型。默认情况下,cbind 调度的方法是 cbind.matrix。如果我们要使用cbind,使用cbind.data.frame

cbind.data.frame(dates, x1, x2)