簡體   English   中英

在 R 中將日期格式化為年月

[英]Format Date to Year-Month in R

我想以年月格式保留我當前的日期列作為日期。 它目前被轉換為 chr 格式。 我嘗試過 as_datetime,但它會將所有值強制為 NA。 我正在尋找的格式是:“2017-01”

library(lubridate)
df<- data.frame(Date=c("2017-01-01","2017-01-02","2017-01-03","2017-01-04",
                       "2018-01-01","2018-01-02","2018-02-01","2018-03-02"),
            N=c(24,10,13,12,10,10,33,45))
df$Date <- as_datetime(df$Date)
df$Date <- ymd(df$Date)
df$Date <- strftime(df$Date,format="%Y-%m")

提前致謝!

lubridate只處理日期,而日期有天數。 但是,正如 alistaire 所提到的,您可以按每月想要工作的月份來划分它們:

library(tidyverse)

df_month <-
  df %>%
  mutate(Date = floor_date(as_date(Date), "month"))

例如,如果您想按月聚合,只需group_by()group_by() summarize()

df_month %>%
  group_by(Date) %>%
  summarize(N = sum(N)) %>%
  ungroup()

#> # A tibble: 4 x 2
#>  Date           N
#>  <date>     <dbl>
#>1 2017-01-01    59
#>2 2018-01-01    20
#>3 2018-02-01    33
#>4 2018-03-01    45

您可以使用 zoo::as.yearmon() 函數解決此問題。 解決方法如下:

library(tidyquant)
library(magrittr) 
library(dplyr)

df <- data.frame(Date=c("2017-01-01","2017-01-02","2017-01-03","2017-01-04",
                  "2018-01-01","2018-01-02","2018-02-01","2018-03-02"),
           N=c(24,10,13,12,10,10,33,45))
df %<>% mutate(Date = zoo::as.yearmon(Date))

您可以使用cut函數,並使用breaks="month"將日期中的所有天數轉換為該月的第一天。 因此,同月內的任何日期在新創建的列中都將具有相同的日期。

這對於按月對數據框中的所有其他變量進行分組很有用(基本上是您要執行的操作)。 但是cut會創建一個因素,但這可以轉換回日期。 因此,您仍然可以在數據框中使用日期類。

你不能擺脫約會中的一天(因為那時,不是約會......)。 之后,您可以為軸或表格創建一個很好的格式。 例如:

true_date <-
  as.POSIXlt(
    c(
      "2017-01-01",
      "2017-01-02",
      "2017-01-03",
      "2017-01-04",
      "2018-01-01",
      "2018-01-02",
      "2018-02-01",
      "2018-03-02"
    ),
    format = "%F"
  )

df <-
  data.frame(
    Date = cut(true_date, breaks = "month"),
    N = c(24, 10, 13, 12, 10, 10, 33, 45)
  )

## here df$Date is a 'factor'. You could use substr to create a formated column
df$formated_date <- substr(df$Date, start = 1, stop = 7)

## and you can convert back to date class. format = "%F", is ISO 8601 standard date format

df$true_date <- strptime(x = as.character(df$Date), format = "%F")

str(df)

暫無
暫無

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

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