在 R 中将日期格式化为年月

AM_*_*123 9 r lubridate

我想以年月格式保留我当前的日期列作为日期。它目前被转换为 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")
Run Code Online (Sandbox Code Playgroud)

提前致谢!

小智 9

lubridate only handle dates, and dates have days. However, as alistaire mentions, you can floor them by month of you want work monthly:

library(tidyverse)

df_month <-
  df %>%
  mutate(Date = floor_date(as_date(Date), "month"))
Run Code Online (Sandbox Code Playgroud)

If you e.g. want to aggregate by month, just group_by() and 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
Run Code Online (Sandbox Code Playgroud)


Wla*_*tes 5

您可以使用 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))
Run Code Online (Sandbox Code Playgroud)

  • 这里你真正需要的是`library(zoo); 转换(df,日期= as.yearmon(日期))` 。 (3认同)