【问题标题】:Converting a date column from Excel/CSV to R gives the wrong date将日期列从 Excel/CSV 转换为 R 会给出错误的日期
【发布时间】:2021-02-10 23:16:43
【问题描述】:

我收到了一个我想在 R 中分析的 CSV 文件,但我遇到了一个我以前从未遇到过的日期列问题。

在 Excel 中打开文件时,给定日期在单元格中显示为 22.12.2020 00:00,在编辑栏中显示为 22.12.2020 00:00:00。当使用 dplyr::read_csv2 读入 R 时,它被读入带有类字符的“22.12.2020 00:00”。当我尝试使用 lubridate::as_date 或 lubridate::as_datetime 将列转换为日期时间时,我分别得到 2022-12-20 和 2022-12-20 20:00:00。我猜这一定是由于初始字符串中缺少秒数。在进行转换之前,我尝试将“:00”添加到字符串的末尾,但这只会导致 NA。谁能告诉我如何解决这个问题?

test4 <- structure(list(ORDER_STATUS_DATE = 20201222, DAY = "22.12.2020 00:00"), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

test4 %>% 
  mutate(DAY = as_datetime(DAY))

# Returns 2022-12-20 20:00:00 but should ideally have returned 2022-12-22 00:00:00

test4 %>% 
  mutate(DAY = as_date(DAY))

# Returns 2022-12-20

test4 %>% 
  mutate(DAY = DAY %>% paste0(":00:00"))
  
# Returns 22.12.2020 00:00:00:00 so converting to date or datetime leads to NAs

【问题讨论】:

  • 你的 MRE 中的 ORDER_STATUS_DATE 是数字,但在你写的问题中你得到了一个字符串......
  • 这是我试图纠正的 DAY 列。
  • 哦,我没有仔细阅读。对不起
  • 我应该在文本中指定它,而不仅仅是在代码中。我的错。

标签: r lubridate


【解决方案1】:

如果日期格式不明确,您需要指定它是什么 - lubridate 非常适合。

lubridate::dmy_hm("22.12.2020 00:00")
#> [1] "2020-12-22 UTC"

【讨论】:

  • 嗯...我很确定我已经尝试过那个解决方案,但一定是把它搞砸了,然后转移到其他不起作用的东西上。谢谢!!
【解决方案2】:

这里不一定需要 lubridate(尽管它是一个很棒的库):

as.POSIXct(test4$DAY, tz = "UTC",  format="%d.%m.%Y %H:%M")

返回:

"2020-12-22 UTC"

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多