在R 中修正日期和时间列的格式

编程语言 2026-07-09

我在数据框里有一列日期,看起来是这样的。当前这列日期显示为yyyy-mm-dd。这是因为csv文件自动把dd-mm-yyyy转换成了这个格式。

我想把这个日期转换成正确的dd-mm-yyyy HH:mm的格式。比如第一行应该是10-11-2024 11:01。我不确定要如何用R 里的lubridate来实现这一点。我也不想手动修改所有的csv文件。

df <- data.frame(date = c(
"2010-11-24 11:01",
"2010-11-24 13:01",
"2010-11-24 15:01",
"2010-11-24 17:01",
"2010-11-24 19:01",
"2010-11-24 21:01",
"2010-11-24 23:01",
"2011-11-24 1:01",
"2011-11-24 3:01",
"2011-11-24 5:01",
"2011-11-24 7:01",
"2011-11-24 9:01",
"2011-11-24 11:01"))

解决方案

听起来你当前数据在上游有一些解析错误。最好在上游就把问题修正。如果你做不到,你可以使用:

library(tidyverse)
df |>
  mutate(date2 = str_sub(date, start = 3) |> dmy_hm(),
         date_fmt = format(date2, "%d-%m-%Y %H:%M")) |>
  tibble() # to show data types in header

date2 会去掉月份数据中的前两位(这两位是误导性的!),并重新解释得到的字符串,假设它表示按DMY H:M顺序的数据。这样就会得到一个名为 'dttm' 的POSIXct日期时间列,你可以在其上进行计算。如果你想看到按dmy顺序表示的文本形式(但不再能直接用于计算),你可以使用 format 将其转换为按该顺序排列的文本('chr')。

# A tibble: 13 × 3
   date             date2               date_fmt        
   <chr>            <dttm>              <chr>           
 1 2010-11-24 11:01 2024-11-10 11:01:00 10-11-2024 11:01
 2 2010-11-24 13:01 2024-11-10 13:01:00 10-11-2024 13:01
 3 2010-11-24 15:01 2024-11-10 15:01:00 10-11-2024 15:01
 4 2010-11-24 17:01 2024-11-10 17:01:00 10-11-2024 17:01
 5 2010-11-24 19:01 2024-11-10 19:01:00 10-11-2024 19:01
 6 2010-11-24 21:01 2024-11-10 21:01:00 10-11-2024 21:01
 7 2010-11-24 23:01 2024-11-10 23:01:00 10-11-2024 23:01
 8 2011-11-24 1:01  2024-11-11 01:01:00 11-11-2024 01:01
 9 2011-11-24 3:01  2024-11-11 03:01:00 11-11-2024 03:01
10 2011-11-24 5:01  2024-11-11 05:01:00 11-11-2024 05:01
11 2011-11-24 7:01  2024-11-11 07:01:00 11-11-2024 07:01
12 2011-11-24 9:01  2024-11-11 09:01:00 11-11-2024 09:01
13 2011-11-24 11:01 2024-11-11 11:01:00 11-11-2024 11:01
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章