我尝试过多种方法无济于事.我有一个日期(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
... ... ...
Run Code Online (Sandbox Code Playgroud)
我这样做的目的是希望在一段时间内从一些订单中平均赚取一个月赚来的钱.任何帮助,或推动正确的方向将非常感激.
raf*_*ira 79
这将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") )
Run Code Online (Sandbox Code Playgroud)
一个简单的例子:
dates <- "2004-02-06"
format(as.Date(dates), "%Y-%m")
> "2004-02"
Run Code Online (Sandbox Code Playgroud)
注意:data.table
如果您正在使用大型数据集,则该方法可以更快.
library(data.table)
setDT(df)[, Month_Yr := format(as.Date(Date), "%Y-%m") ]
Run Code Online (Sandbox Code Playgroud)
Ash*_*wad 19
这是另一个解决方案,使用专门用于在 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
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2020-09-01 创建
该软件包具有可以帮助转换的zoo
功能。as.yearmon
require(zoo)
df$ym <- as.yearmon(df$date, "%Y %m")
Run Code Online (Sandbox Code Playgroud)