将 R 中的日期从破折号转换为斜线格式?
Convert Date in R from dash to slash format?
我有以下日期:
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 吗?
您需要先将日期转换为 class 日期,然后使用 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)
将数据转换为日期 class。
在这里你可以使用anytime
包转换成日期格式然后用斜杠/
替换-
library(dplyr)
library(stringr)
library(anytime)
my_dataset <- tibble(my_date = c("03-05-2020", "04-05-2020", "05-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
@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", "04-05-2020",
"05-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>
我的一般建议是 永远不要 在可以使用适当的日期解析器的情况下对日期输入使用字符串操作或正则表达式。
我有以下日期:
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 吗?
您需要先将日期转换为 class 日期,然后使用 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)
将数据转换为日期 class。
在这里你可以使用anytime
包转换成日期格式然后用斜杠/
library(dplyr)
library(stringr)
library(anytime)
my_dataset <- tibble(my_date = c("03-05-2020", "04-05-2020", "05-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
@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", "04-05-2020",
"05-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>
我的一般建议是 永远不要 在可以使用适当的日期解析器的情况下对日期输入使用字符串操作或正则表达式。