簡體   English   中英

如何從R中的日期中提取月和日並將其轉換為日期類型?

[英]How to extract Month and Day from Date in R and convert it as a date type?

我的R會議是Rstudio ,我有以下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" ...

我需要在dataframe MthDD d2增加一個列(我們稱其為MthDD ),這將是“ PickUpDate ”列的月份和日期。 因此,列MthDD必須采用mm-dd格式,但最重要的是,它仍應為date type

我該如何實現?

更新:我已經嘗試了以下操作,但是它將新列輸出為字符類型。 我需要將該列設置為日期類型,以便可以將其用作繪圖的x軸組件。

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

嘗試使用此:

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")

Date對象不顯示為mm-dd。 您可以使用該表示形式創建一個字符串,但是它將不再屬於Date類,而是屬於character類。

如果您想要一個顯示為mm-dd且仍然像Date對象一樣工作的對象,您可以創建一個新的Date S3子類,該子類以您想要的方式顯示並使用。 在這里,我們創建了一個名為mmddDate子類, as.mmdd具有as.mmdd泛型, as.mmdd.Date方法, as.Date.mmdd方法和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))

給予:

> DF2
           x     y
1 2018-03-26 03-26
2 2018-03-27 03-27
3 2018-03-28 03-28

> class(DF2$y)
[1] "mmdd" "Date"

> as.Date(DF2$y)
[1] "2018-03-26" "2018-03-27" "2018-03-28"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM