从日期开始提取年份

时间:2016-04-12 08:48:55

标签: r

如何从变量中删除第一个元素,尤其是当此变量具有特殊字符时。例如,我有以下专栏:

Date
01/01/2009
01/01/2010
01/01/2011
01/01/2012

我需要一个新的列,如下所示:

Date
2009
2010
2011
2012

8 个答案:

答案 0 :(得分:116)

正如评论中所讨论的,这可以通过将条目转换为Date格式并提取年份来实现,例如:

format(as.Date(df1$Date, format="%d/%m/%Y"),"%Y")

答案 1 :(得分:39)

答案 2 :(得分:13)

如果所有日期都是相同的宽度,则可以将日期放在向量中并使用子字符串

Date
a <- c("01/01/2009", "01/01/2010" , "01/01/2011")
substring(a,7,10) #This takes string and only keeps the characters beginning in position 7 to position 10

输出

[1] "2009" "2010" "2011"

答案 3 :(得分:5)

将变量转换为Date时:

date <-  as.Date('10/30/2018','%m/%d/%Y')

然后您可以切出所需的元素并创建新变量,例如year:

year <- as.numeric(format(date,'%Y'))

或月份:

month <- as.numeric(format(date,'%m'))

答案 4 :(得分:1)

这是比特定答案更多的建议,但我的建议是立即将日期转换为日期变量,而不是将其保留为字符串。这样,您可以在其上使用日期(和时间)函数,而不必尝试使用非常麻烦的解决方法。

如前所述,lubridate软件包具有良好的提取功能。

对于某些项目,我发现从一开始就进行拼写会有所帮助: 创建年,月,日(月)和日(周)变量开始。 这可以简化摘要,表格和图形,因为提取代码与摘要/表格/图形代码是分开的,并且因为如果需要更改它,则不必在多个位置进行这些更改。

答案 5 :(得分:1)

如果您使用的是date package,则可以轻松完成。

library(date)
Date <- c("01/01/2009", "01/01/2010", "01/01/2011", "01/01/2012")
Date <- as.date(Date)
Date
# [1] 1Jan2009 1Jan2010 1Jan2011 1Jan2012
date.mdy(Date)$year
# [1] 2009 2010 2011 2012

## be aware that these are now integers and thus different methods may be invoked:
str(date.mdy(Date)$year)
# int [1:4] 2009 2010 2011 2012
summary(Date)
#     First      Last   
# "1Jan2009" "1Jan2012" 
summary(date.mdy(Date)$year)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#    2009    2010    2010    2010    2011    2012 

答案 6 :(得分:0)

在一段时间内,您还只能依靠data.table包及其IDate类以及相关功能(检查?as.IDate())。因此,无需额外安装lubridate

require(data.table)

a <- c("01/01/2009", "01/01/2010" , "01/01/2011")
year(as.IDate(a, '%d/%m/%Y')) # all data.table functions

答案 7 :(得分:-2)

首先使用

将其转换为日期格式
library(lubridate)

date<-c("01/01/2009","01/01/2010", "01/01/2011"," 01/01/2012")

year(as.Date(date,"%d/%m/%Y")) #it will give you only years

希望对你有所帮助! :)