改变和格式化多个日期列
Mutate and format multiple date columns
我有一个 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"))
最后,是否可以将这些列分配为 'datetime' 列(例如 dttm)而不是 chr
一旦日期格式发生了?
您传递的 format
参数用于 as.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
我有一个 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"))
最后,是否可以将这些列分配为 'datetime' 列(例如 dttm)而不是 chr
一旦日期格式发生了?
您传递的 format
参数用于 as.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