如何从R中的日期中提取月份和日期并将其转换为日期类型?

时间:2018-03-26 10:33:51

标签: r date lubridate

RstudioR次会话,我有以下R个代码:

d1 <- read.csv("mydata.csv", stringsAsFactors = FALSE, header = TRUE)

d2 <- d1 %>% 
      mutate(PickUpDate = ymd(PickUpDate))

str(d2$PickUpDate)

上面最后一行代码的输出如下:

Date[1:14258], format: "2016-10-21" "2016-07-15" "2016-07-01" "2016-07-01" "2016-07-01" "2016-07-01" ...

我需要一个额外的列(让我们称之为MthDD)到dataframe d2,这将是&#34; {{的月和日1}}&#34;柱。因此,列PickUpDate必须采用MthDD格式,但最重要的是,它仍应属于mm-dd

我怎样才能做到这一点?

更新: 我尝试了以下但它输出新列作为字符类型。我需要列为日期类型,以便我可以将其用作绘图的x轴组件。

date type

2 个答案:

答案 0 :(得分:0)

尝试使用:

PickUpDate2 <- format(PickUpDate,"%m-%d")
PickUpDate2 <- as.Date(PickUpDate2, "%m-%d")

这应该可行,您应该能够在之后使用bind_cols,或者只是将其添加到数据框中,就像您在所提供的代码中所提议的那样。所以代码应该替换为:

d2$PickUpDate2 <- format(d2$PickUpDate,"%m-%d")
d2$PickUpDate2 <- as.Date(d2$PickUpDate2, "%m-%d")

答案 1 :(得分:0)

Date个对象不显示为mm-dd。您可以使用该表示创建一个字符串,但它不再是Date类 - 它将是character类。

如果你想要一个显示为mm-dd但仍然像Date对象的对象你可以做的是创建一个Date的新S3子类,它以你想要的方式显示和使用那。在这里,我们使用Date通用,mmdd方法,as.mmdd方法和as.mmdd.Date方法创建名为as.Date.mmdd的{​​{1}}子类。显示它时将使用最后一个。 format.mmdd将继承mmdd类的方法,但您可能仍需要根据您想要做的其他方法来定义其他方法 - 您可能需要进行一些实验。

Date

,并提供:

as.mmdd <- function(x, ...) UseMethod("as.mmdd")
as.mmdd.Date <- function(x, ...) structure(x, class = c("mmdd", "Date"))

as.Date.mmdd <- function(x, ...) structure(x, class = "Date")

format.mmdd <- function(x, format = "%m-%d", ...) format(as.Date(x), format = format, ...)

DF <- data.frame(x = as.Date("2018-03-26") + 0:2) # test data

DF2 <- transform(DF, y = as.mmdd(x))