Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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中更改列年_R_Date - Fatal编程技术网

在R中更改列年

在R中更改列年,r,date,R,Date,我有一个excel文件,在日期列中,它显示从2015年1月1日到2015年12月31日。我想把所有的15年都改为14年,这样所有的日期看起来都是从2014年1月1日到2014年12月31日。在R怎么做?现在我只是使用替换功能手动更改日期。但是还有150000条记录……您可以使用lubridate,只需减去'x'年数即可 library(lubridate) # some random 2015 dates df <- data.frame(dates = mdy("01/13/2015"

我有一个excel文件,在日期列中,它显示从2015年1月1日到2015年12月31日。我想把所有的15年都改为14年,这样所有的日期看起来都是从2014年1月1日到2014年12月31日。在R怎么做?现在我只是使用替换功能手动更改日期。但是还有150000条记录……

您可以使用lubridate,只需减去'x'年数即可

library(lubridate)

# some random 2015 dates
df <- data.frame(dates = mdy("01/13/2015", "02/25/2015"))

# subtract 1 year
df$dates <- with(df, dates - years(1))
df

       dates
1 2014-01-13
2 2014-02-25

如果您不想转换为“Date”类并保持相同的格式,那么一个选项是sub。在这里,我们匹配最后两个字符,即14,并将其替换为15

 sub('14$', '15', v1)
 #[1] "1/1/15"   "12/31/15" "1/1/15"  
数据
您只想在2015年进行更改?它将作为字符串导入,因此只需gsub它并在之后转换为日期。如果您不提供可复制的示例、代码片段或所需的输出,则很难为您提供帮助。如@rawr所述,sub'14$,'15',v1将是一种方式…除非您有一个包含2月29日的源年份,在这种情况下,你可能会得到无意义的约会。lubridate的年数更安全。你也可以用基数R减去它们。我还认为这里应该有一些条件。你应该更改命令以匹配用户的输入。谢谢你!这正是我需要的@HeidiKaten很高兴它能起作用,请接受答案,这样问题就结束了。从2016年2月29日开始减去一年,这是如何起作用的?@Serbantanta我们不会从2016年开始减去。如果我理解这个问题的话,它只是将15替换为14。@nasa我可以对你的答案说同样的话。OP没有指定数据的类型,因此时间可能不太可能,但从我的角度来看,最有可能的是字符串。更可能的是,我只是在跟帖中的文字。我知道这在所有情况下都不起作用。但是,对我来说,把15岁变成14岁是很具体的。
 v1 <- c('1/1/15', '12/31/15', '1/1/14')