我有一个非常大的数据集,有大约200000行和15列,其中有一列"日期"以这种格式" 1/18/1996 0:00:00"我从1996年到2011年的日期不同,格式相同:
head(data$Date)
[1] "1/6/1996 0:00:00" "1/11/1996 0:00:00" "1/11/1996 0:00:00" "1/11/1996 0:00:00"
[5] "1/11/1996 0:00:00" "1/18/1996 0:00:00"
我想用年份替换那些日期" 1996,1997,...,2011&#34 ;;我可以用几个像这样的gsub命令来做到这一点:
x<- gsub(".*/1996 .*", "1996", data$Date)
并且它适用于替换,但我希望只有一个命令,并向我的数据集添加一个新命令,只包含年份,是否可能?
提前致谢。
答案 0 :(得分:2)
对于像这样的任务,您应该使用日期时间函数而不是正则表达式:
Date <- c("1/6/1996 0:00:00", "1/11/1996 0:00:00", "1/11/1996 0:00:00",
"1/11/1996 0:00:00", "1/11/1996 0:00:00", "1/18/1996 0:00:00")
Date <- as.POSIXct(Date, format="%m/%d/%Y %H:%M:%S", tz="UTC")
as.POSIXlt(Date)$year + 1900
#[1] 1996 1996 1996 1996 1996 1996
答案 1 :(得分:1)
这是一种方式:
Date <- c("1/6/1996 0:00:00", "1/11/1996 0:00:00", "1/11/1996 0:00:00",
"1/11/1996 0:00:00", "1/11/1996 0:00:00", "1/18/1996 0:00:00")
gsub("(.+/){2}| .+", "", Date)
# [1] "1996" "1996" "1996" "1996" "1996" "1996"
答案 2 :(得分:0)
data$Date.new <- sub(".*/(\\d{4}).*", "\\1", data$Date)
?
答案 3 :(得分:0)
使用lubridate
和@Sven数据,使用mdy_hms
等内置函数将字符串转换为日期更容易:
mdy_hms(Dates)
"1996-01-06 UTC" "1996-01-11 UTC" "1996-01-11 UTC"
"1996-01-11 UTC" "1996-01-11 UTC" "1996-01-18 UTC"
要获得年限,可以申请year
功能:
year(mdy_hms(Dates))
1996 1996 1996 1996 1996 1996