Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用一个gsub命令将不同的日期替换为其他日期_R_Gsub - Fatal编程技术网

R 使用一个gsub命令将不同的日期替换为其他日期

R 使用一个gsub命令将不同的日期替换为其他日期,r,gsub,R,Gsub,我有一个相当大的数据集,大约有200000行和15列,其中有一列“Date”,格式为“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年、

我有一个相当大的数据集,大约有200000行和15列,其中有一列“Date”,格式为“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年”来代替这些日期;我可以使用以下几个gsub命令:

x<- gsub(".*/1996 .*", "1996", data$Date)
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
x
data$Date.new这里有一种方法:

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"

Date对于以下任务,您应该使用datetime函数而不是regex:

x<- gsub(".*/1996 .*", "1996", data$Date)
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

Date使用
lubridate
和@Sven数据,使用内置函数(如
mdy\u 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

斯文,谢谢,效果很好:-)。。。我一直在努力使用gsubfn…但看起来你的方式很棒!我必须搜索更多来找出这些元字符是如何工作的?感谢罗兰,非常简单的方法:-)你是对的,使用日期时间函数更容易!