使用一个gsub命令将其他日期替换为其他日期

时间:2014-03-02 08:33:45

标签: r gsub

我有一个非常大的数据集,有大约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)

并且它适用于替换,但我希望只有一个命令,并向我的数据集添加一个新命令,只包含年份,是否可能?

提前致谢。

4 个答案:

答案 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