我的日期格式为日期格式为MM-DD-YYYY的列。 我想添加2列,其中只包含YYYY,另一列只包含MM。
我该怎么做?
答案 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"))