将R中的日期从破折号转换为斜杠格式?

问题描述

我有以下日期:

my_dataset <- tibble(my_date = c("03-05-2020","04-05-2020","05-05-2020","06-05-2020"))

我想创建一个名为nice_dates的新列,其日期格式为: dd / mm / yyyy 格式,所以最终得到这样的内容:>

my_date    | nice_dates 
03-05-2020 | 03/05/2020
04-05-2020 | 04/05/2020
05-05-2020 | 05/05/2020
06-05-2020 | 06/05/2020

我尝试使用lubridate pacakge,但是在定义新格式时卡住了,我知道它应该为“%d /%m /%Y”,但是使用as.Date()会得出NA。

我应该只使用gsub吗?

解决方法

@ThoVu快要出现了。因此,为完整起见,仅使用基数R即可得到一个简单得多的答案。

## input data as before
df <- data.frame(my_date = c("03-05-2020","04-05-2020","05-05-2020","06-05-2020"))

## create Date objects using base R
df$parsed <- strptime(df$my_date,"%d-%m-%Y")

## format them to spec
df$nice_dates <- format(df$parsed,"%d/%m/%Y")
输出量
R> df <- data.frame(my_date = c("03-05-2020","06-05-2020"))
R> df$parsed <- strptime(df$my_date,"%d-%m-%Y")
R> df$nice_dates <- format(df$parsed,"%d/%m/%Y")
R> df
     my_date     parsed nice_dates
1 03-05-2020 2020-05-03 03/05/2020
2 04-05-2020 2020-05-04 04/05/2020
3 05-05-2020 2020-05-05 05/05/2020
4 06-05-2020 2020-05-06 06/05/2020
R> 

我的一般建议是,当可以使用适当的日期解析器时,永远不要在日期输入中使用字符串操作或正则表达式。

,

您需要先将日期转换为日期类,然后使用format来获取所需格式的数据。由于所需的最终输出是字符,因此您也可以在此处使用gsub

library(dplyr)

my_dataset %>%
  mutate(nice_dates = format(as.Date(my_date,'%d-%m-%Y'),'%d/%m/%Y'),nice_dates_gsub = gsub('-','/',my_date))

# A tibble: 4 x 3
#  my_date    nice_dates nice_dates_gsub
#  <chr>      <chr>      <chr>          
#1 03-05-2020 03/05/2020 03/05/2020     
#2 04-05-2020 04/05/2020 04/05/2020     
#3 05-05-2020 05/05/2020 05/05/2020     
#4 06-05-2020 06/05/2020 06/05/2020     

您还可以使用lubridate::dmy(my_date)将数据转换为日期类。

,

在这里,您可以使用anytime包将其转换为日期格式,然后将-替换为斜杠/

library(dplyr)
library(stringr)
library(anytime)
my_dataset <- tibble(my_date = c("03-05-2020","06-05-2020"))
my_dataset$mice_date <- format(anydate(my_dataset$my_date),'%m/%d/%Y')
#   my_date    mice_date 
#   <chr>      <chr>     
# 1 03-05-2020 03/05/2020
# 2 04-05-2020 04/05/2020
# 3 05-05-2020 05/05/2020
# 4 06-05-2020 06/05/2020