0

我有一个tibble包含一些格式化为字符串的日期列:

library(tidyverse)

df<-tibble(dates1 = c("2020-08-03T00:00:00.000Z", "2020-08-03T00:00:00.000Z"),
           dates2 = c("2020-08-05T00:00:00.000Z", "2020-08-05T00:00:00.000Z"))

我想将字符串从 YMD-HMS 转换为 DMY-HMS。有人可以向我解释为什么这不起作用:

df %>% 
  mutate_at(vars(starts_with("dates")), as.Date, format="%d/%m/%Y %H:%M:%S")

而这呢?

df %>% mutate(dates1 = format(as.Date(dates1),  "%d/%m/%Y %H:%M:%S")) %>% 
  mutate(dates2 = format(as.Date(dates2),  "%d/%m/%Y %H:%M:%S"))

最后,是否可以将这些列分配为“日期时间”列(例如 dttm),而不是chr在日期格式发生后分配?

4

1 回答 1

1

您传递的format参数是 foras.Date而您真正想要的是将它传递给format函数。您可以为此使用匿名函数或使用公式语法。

library(dplyr)
df %>% 
  mutate(across(starts_with("dates"), ~format(as.Date(.), "%d/%m/%Y %H:%M:%S")))

# A tibble: 2 x 2
#  dates1              dates2             
#  <chr>               <chr>              
#1 03/08/2020 00:00:00 05/08/2020 00:00:00
#2 03/08/2020 00:00:00 05/08/2020 00:00:00

要将数据表示为日期或日期时间,R 使用标准的表示方式,即Y-M-D H:M:S,您可以使用更改表示,format但输出将是上述字符。

df %>% 
  mutate(across(starts_with("dates"), lubridate::ymd_hms))

#  dates1              dates2             
#  <dttm>              <dttm>             
#1 2020-08-03 00:00:00 2020-08-05 00:00:00
#2 2020-08-03 00:00:00 2020-08-05 00:00:00
于 2020-08-25T15:16:56.373 回答