从带有日期的向量中隔离年份

时间:2014-04-18 12:40:57

标签: r vector dataframe character

如何将年份与带日期的向量隔离?或者一般来说:你怎么能隔离一个单词的一部分(这里,一个单词的最后四个字母)?

date <- c("05.06.2001","02.10.2003","06.12.2004","01.01.2001","01.04.2003")
company <- c(1,1,1,2,2)

mydf <- data.frame(date, company)
mydf

#         date company
# 1 05.06.2001       1
# 2 02.10.2003       1
# 3 06.12.2004       1
# 4 01.01.2001       2
# 5 01.04.2003       2

输出应如下所示:

#         date company year
# 1 05.06.2001       1 2001
# 2 02.10.2003       1 2003
# 3 06.12.2004       1 2004
# 4 01.01.2001       2 2001
# 5 01.04.2003       2 2003

我试过使用lubridate包

require(lubridate)
mydf$year <- year(mydf$date)

但是,我希望能够做到这一点,而不是只适用于日期的包。

2 个答案:

答案 0 :(得分:2)

以下是两种方法,一种基于日期,一种基于字符:

with(mydf, substr(date, nchar(as.character(date)) - 3, 
                  nchar(as.character(date))))
# [1] "2001" "2003" "2004" "2001" "2003"

format(as.Date(mydf$date, "%d.%m.%Y"), "%Y")
# [1] "2001" "2003" "2004" "2001" "2003"

nchar在这种情况下有点过分,因为字符串是固定的宽度,但是这应该给你一个如何从字符串末尾向后移动4个字符的例子。

答案 1 :(得分:1)

使用stringi包中的stri_sub获取最后4个字符:

require(stringi)    
stri_sub(mydf$date, from=-4)
## [1] "2001" "2003" "2004" "2001" "2003"

from参数中使用的负值表示字符应从字符串末尾开始计算。 to参数的默认值为-1,表示“直到结束”,因此无需更改此内容。