从R中的日期提取月份和年份

pcww981p  于 2023-07-31  发布在  其他
关注(0)|答案(6)|浏览(118)

我试过许多方法都没有用。我有日期(YYYY-MM-DD)的数据,并试图仅获得月份和年份的数据,例如:MM-YYYY或YYYY-MM。
最后,我希望它看起来像这样:

ID    Date         Month_Yr
1     2004-02-06   2004-02
2     2006-03-14   2006-03
3     2007-07-16   2007-07
...   ...          ...

字符串
我这样做是希望绘制一段时间内平均一个月从一些订单中赚来的钱。任何帮助,或推动正确的方向将不胜感激。

yquaqz18

yquaqz181#

这将向data.frame添加一个具有指定格式的新列。

df$Month_Yr <- format(as.Date(df$Date), "%Y-%m")

df
#>   ID       Date Month_Yr
#> 1  1 2004-02-06  2004-02
#> 2  2 2006-03-14  2006-03
#> 3  3 2007-07-16  2007-07

# your data sample
  df <- data.frame( ID=1:3,Date = c("2004-02-06" , "2006-03-14" , "2007-07-16") )

字符串
一个简单的例子:

dates <- "2004-02-06"

format(as.Date(dates), "%Y-%m")
> "2004-02"

  • 旁注 *:如果您正在处理一个大数据集,data.table方法可能会更快。
library(data.table)
setDT(df)[, Month_Yr := format(as.Date(Date), "%Y-%m") ]

7vux5j2d

7vux5j2d2#

下面是另一个解决方案,它使用了一个专用于在R中处理日期和时间的包:

library(tidyverse)
library(lubridate)

(df <- tibble(ID = 1:3, Date = c("2004-02-06" , "2006-03-14", "2007-07-16")))
#> # A tibble: 3 x 2
#>      ID Date      
#>   <int> <chr>     
#> 1     1 2004-02-06
#> 2     2 2006-03-14
#> 3     3 2007-07-16

df %>%
  mutate(
    Date = ymd(Date),
    Month_Yr = format_ISO8601(Date, precision = "ym")
  )
#> # A tibble: 3 x 3
#>      ID Date       Month_Yr
#>   <int> <date>     <chr>   
#> 1     1 2004-02-06 2004-02 
#> 2     2 2006-03-14 2006-03 
#> 3     3 2007-07-16 2007-07

字符串
reprex package(v0.3.0)于2020-09-01创建

50pmv0ei

50pmv0ei3#

使用子字符串?

d = "2004-02-06"
substr(d,0,7)
>"2004-02"

字符串

hjzp0vay

hjzp0vay4#

zoo封装具有as.yearmon可以帮助转换的功能。

require(zoo)

df$ym <- as.yearmon(df$date, "%Y %m")

字符串

vdzxcuhz

vdzxcuhz5#

如果需要月份名称而不是数字,例如在重复的分类问题Extract month and year from datetime in R中,可以使用format%B%b来完成。

date <- as.Date(c("2011-10-20", "2011-12-25", "2012-04-15"))

format(date, "%Y %B %b %m")
#[1] "2011 October Oct 10"  "2011 December Dec 12" "2012 April Apr 04"

字符串
在哪里

  • %Y年份
  • %B当前区域设置中的完整月份名称
  • %b当前区域设置中的缩写月份名称
  • %m月份为十进制数

这些格式的文档可以在strptime , strftime中找到。
此外,可以使用months提取当前区域设置中的月份名称

months(date)
#[1] "October"  "December" "April"


要在其他语言中获得它,可以使用Sys.setlocale

Sys.setlocale("LC_TIME", "de_DE.UTF-8")

format(date, "%Y %B %b %m")
#[1] "2011 Oktober Okt 10"  "2011 Dezember Dez 12" "2012 April Apr 04"

months(date)
#[1] "Oktober"  "Dezember" "April"

4bbkushb

4bbkushb6#

data.table包在不久前引入了IDate类和zoo-类似包的函数,用于检索月、日等(检查?IDate)。现在,您可以通过以下方式提取所需的信息:

require(data.table)
df <- data.frame(id = 1:3,
                 date = c("2004-02-06" , "2006-03-14" , "2007-07-16"))
setDT(df)
df[ , date := as.IDate(date) ] # instead of as.Date()
df[ , yrmn := paste0(year(date), '-', month(date)) ]
df[ , yrmn2 := format(date, '%Y-%m') ]

字符串

相关问题