从完整日期列添加月份和年份列

时间:2017-12-28 19:43:04

标签: r date

我的日期格式为日期格式为MM-DD-YYYY的列。 我想添加2列,其中只包含YYYY,另一列只包含MM。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

基地R再次为您提供了所需的一切,您应使用子字符串执行此操作。

我们首先使用正确的data.frame列创建Date。如果您的日期采用文字格式,请先使用as.Date()或我的anytime::anydate()(不需要格式)进行解析。

然后给出创建年份和月份的日期很简单:

R> df <- data.frame(date=Sys.Date()+seq(1,by=30,len=10))
R> df[, "year"] <- format(df[,"date"], "%Y")
R> df[, "month"] <- format(df[,"date"], "%m")
R> df
         date year month
1  2017-12-29 2017    12
2  2018-01-28 2018    01
3  2018-02-27 2018    02
4  2018-03-29 2018    03
5  2018-04-28 2018    04
6  2018-05-28 2018    05
7  2018-06-27 2018    06
8  2018-07-27 2018    07
9  2018-08-26 2018    08
10 2018-09-25 2018    09
R> 

如果您希望将年份或月份作为整数,则可以围绕格式包装as.integer()

答案 1 :(得分:1)

base R选项是使用sub删除子字符串,然后使用read.table

阅读
df1[c('month', 'year')] <- read.table(text=sub("-\\d{2}-", ",", df1$date), sep=",") 

或使用tidyverse

library(tidyverse)
separate(df1, date, into = c('month', 'day', 'year') %>% 
           select(-day)

注意:转换为datetime类而不是使用字符串格式可能更好。

df1 %>%
     mutate(date =mdy(date), month = month(date), year = year(date))

数据

df1 <- data.frame(date = c("05-21-2017", "06-25-2015"))