如何将年份与带日期的向量隔离?或者一般来说:你怎么能隔离一个单词的一部分(这里,一个单词的最后四个字母)?
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)
但是,我希望能够做到这一点,而不是只适用于日期的包。
答案 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,表示“直到结束”,因此无需更改此内容。