如何以月-年格式获取日期?

时间:2019-12-30 12:38:38

标签: r date datetime

我从具有以下日期类型的某人那里获取了数据:

"Jan-20", "Feb-19", "May-18"

我想将它们转换为以下格式:

"01-20", "02-19", "05-18"

但是,每当我尝试将列转换为as.date时,它都会返回NA值。

例如

df<- data.frame(MonthYear = c("Jan-20", "Feb-19", "May-18"))
df$MonthYear<-as.Date(df$MonthYear, format = "%b-%y")

输出:

MonthYear
1      <NA>
2      <NA>
3      <NA>

因此,我使用了以下代码并添加了day。但我不想约会:

df<- data.frame(MonthYear = c("Jan-20", "Feb-19", "May-18"))
df$MonthYear<-paste(as.character(df$MonthYear))
df$MonthYear<-paste("01-",as.character(df$MonthYear))
df$MonthYear<-as.Date(df$MonthYear, format = "%d- %b-%y")

输出:

MonthYear
1 2020-01-01
2 2019-02-01
3 2018-05-01

但是我所需的输出如下:

MonthYear
1 2020-01
2 2019-02
3 2018-05

4 个答案:

答案 0 :(得分:4)

使用Zoo包(和magrittr管道)中的as.yearmon()

library(zoo)
library(magrittr)
as.yearmon(df$MonthYear, "%b-%y") %>%
 format(., "%Y-%m")


[1] "2020-01" "2019-02" "2018-05"

也可以不使用'。'用作管道左侧的占位符。之所以保留这些功能,是因为这些功能不是典型的tidyverse管道功能。

as.yearmon(df$MonthYear, "%b-%y") %>%
 format("%Y-%m")

或者根本不使用管道,而是使用嵌套函数(如@Sotos所指出的)。我发现它们较难阅读,并且无论如何通常都会加载tidyverse(因此还有%>%管道)。

format(as.yearmon(df$MonthYear, "%b-%y"), "%Y-%m")

答案 1 :(得分:1)

您可以粘贴任意日期,将其转换为Date,然后使用format

format(as.Date(paste0("01-",df$MonthYear), "%d-%b-%y"), "%Y-%m")
#[1] "2020-01" "2019-02" "2018-05"

答案 2 :(得分:0)

也许您可以使用gsub()尝试以下操作以仅保留年份和月份,即

format(gsub("(.*)-\\d+","\\1",df$MonthYear),format = "%Y-%m")

或者只是

gsub("(.*)-\\d+","\\1",df$MonthYear)

如此

[1] "2020-01" "2019-02" "2018-05"

数据

df <- structure(list(MonthYear = structure(c(18262, 17928, 17652), class = "Date")), class = "data.frame", row.names = c(NA, 
-3L))

答案 3 :(得分:0)

x <- c("Jan-20", "Feb-19", "May-18")
for (i in seq_along(month.abb)) x <- sub(month.abb[i], sprintf("%02d", i), x) 
# Can add fixed = TRUE for speed

x
# [1] "01-20" "02-19" "05-18"