仅调整R中某些数据的年份

仅调整R中某些数据的年份,r,date,formatting,R,Date,Formatting,我有一个包含730个观察值的数据框,其中一列是日期列,所有的日期都应该是2007年,我意识到有几个似乎被错误地输入为2006年。有没有一种方法可以让我使用R选择2005年,并将其更改为2008年,而不影响月份和日期 它是r中的日期格式,如下所示 2005-05-21 编辑: 这是您要求的输出: structure(c(13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 1360

我有一个包含730个观察值的数据框,其中一列是日期列,所有的日期都应该是2007年,我意识到有几个似乎被错误地输入为2006年。有没有一种方法可以让我使用R选择2005年,并将其更改为2008年,而不影响月份和日期

它是r中的日期格式,如下所示

2005-05-21
编辑:

这是您要求的输出:

structure(c(13604, 13604, 13604, 13604, 13604, 13604, 13604, 
13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 13604, 
13604, 13604, 13604, 13604, 13597, 13597, 13597, 13597, 13597, 
13597, 13597, 13597, 13597, 13597, 13598, 13598, 13598, 13598, 
13598, 13598, 13598, 13598, 13598, 13598, 13607, 13607, 13607, 
13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 
13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 
13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 
13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 13607, 
13607, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 
13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 
13608, 13608, 13608, 13598, 13598, 13598, 13598, 13598, 13598, 
13598, 13598, 13598, 13598, 13598, 13598, 13598, 13598, 13598, 
13598, 13598, 13598, 13598, 13598, 13597, 13597, 13597, 13597, 
13597, 13597, 13597, 13597, 13597, 13597, 13597, 13597, 13597, 
13597, 13597, 13597, 13597, 13597, 13597, 13597, 13605, 13605, 
13605, 13605, 13605, 13605, 13605, 13605, 13605, 13605, 13605, 
13605, 13605, 13605, 13605, 13605, 13605, 13605, 13605, 13605, 
13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 
13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 13608, 
13608, 13608, 13244, 13244, 13244, 13244, 13244, 13244, 13244, 
13244, 13244, 13244, 13244, 13244, 13244, 13244, 13244, 13244, 
13244, 13244, 13244, 13244, 13600, 13600, 13600, 13600, 13600, 
13600, 13600, 13600, 13600, 13600, 13600, 13600, 13600, 13600, 
13600, 13600, 13600, 13600, 13600, 13600, 13613, 13613, 13613, 
13613, 13613, 13613, 13613, 13613, 13613, 13613, 13613, 13613, 
13613, 13613, 13613, 13613, 13613, 13613, 13613, 13613, 13613, 
13610, 13610, 13610, 13610, 13610, 13610, 13610, 13610, 13610, 
13610, 13610, 13610, 13610, 13610, 13610, 13610, 13610, 13610, 
13610, 13610, 13610, 13616, 13616, 13616, 13616, 13616, 13616, 
13616, 13616, 13616, 13616, 13616, 13616, 13616, 13616, 13616, 
13616, 13616, 13616, 13616, 13616, 13616, 13616, 13616, 13616, 
13616, 13616, 13616, 13616, 13616, 13616, 13616, 13616, 13616, 
13616, 13616, 13616, 13616, 13616, 13616, 13616, 13618, 13618, 
13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 
13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 13618, 
13621, 13621, 13621, 13621, 13621, 13621, 13621, 13621, 13621, 
13621, 13621, 13621, 13621, 13621, 13621, 13621, 13621, 13621, 
13621, 13621, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 
13622, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 
13622, 13622, 13622, 13622, 13620, 13620, 13620, 13620, 13620, 
13620, 13620, 13620, 13620, 13620, 13620, 13620, 13620, 13620, 
13620, 13620, 13620, 13620, 13620, 13620, 13622, 13622, 13622, 
13622, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 
13622, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 13622, 
13622, 13622, 13623, 13623, 13623, 13623, 13623, 13623, 13623, 
13623, 13623, 13623, 13623, 13623, 13623, 13623, 13623, 13623, 
13623, 13623, 13623, 13623, 13623, 14080, 14080, 14080, 14080, 
14080, 14080, 14080, 14080, 14080, 14080, 14080, 14080, 14080, 
14080, 14080, 14080, 14080, 14080, 14080, 14080, 14080, 14081, 
14082, 14083, 14084, 14085, 14086, 14087, 14088, 14089, 14090, 
14091, 14092, 14093, 14094, 14095, 14096, 14097, 14098, 14099, 
14100, 14101, 14102, 14103), class = "Date")sked for

如果您以字符形式读取日期, 您可以简单地使用正则表达式

其思路如下:

gsub("^2005", "2008","2005-05-21")

#output
[1] "2008-05-21"
注意:“^2005”:如果字符串以“2005”开头

让我们假设从您的数据中提取:

data <- structure(c(13604, 13604, 13604, 13604, 13604, 13604, 13604), class = "Date")

#check
data
[1] "2007-04-01" "2007-04-01" "2007-04-01" "2007-04-01" "2007-04-01" "2007-04-01" "2007-04-01"

#substitution, with class conversion
data2 <- as.Date(gsub("^2007", "2008", data))

#output
data2

[1] "2008-04-01" "2008-04-01" "2008-04-01" "2008-04-01" "2008-04-01" "2008-04-01" "2008-04-01"

#check
class(data2)
[1] "Date"

data如果希望将其保留为日期格式,可以使用lubridate执行以下操作

library(lubridate)

year(yourDF$date)[year(yourDF$date)==2005] <- 2008
库(lubridate)
年(yourDF$date)[年(yourDF$date)=2005]假设您的日期为

x <- as.Date('2005/01/01')

x请发布
dput(yourdataframe$datecolumn)
的输出,以便我们能够准确地理解列的类别、格式等。如果您的列是character类型,也许您可以简单地这样做:
yourDF$dateCol OP说“它是日期格式的”,这对我来说很有效。只需确保安装并加载lubridate软件包。
>df date 1 2005-01-01 2 2005-01-01 3 2008-01-01 4 2008-01-01>库(lubridate)>year(df$date)[year(df$date)=2005]=2008 checkslotSignment(对象、名称、值)中的错误:类“logical”对象的赋值对于类为“Period”的对象中的插槽“.Data”无效;is(值,“数值”)不正确。此外:警告消息:在Ops.factor中(per@.Data,num):“+”对于因子来说没有意义
我编辑了我的答案,加入了一个简短的例子来说明它是有效的。很有趣。它确实适用于您的案例(两列数据框),而不适用于我的案例(单列数据框)。这是一种将所有年份更改为2008年的更简单方法,但OP提到他们错误地编写了2005年而不是2008年,因此此代码只会更改2005年的条目。?!我的例子展示了如何转换一个日期,你的意思是什么?我的意思是,如果OP使用你的方法,它将在每年增加3个日期,这只有在所有年份都是2005年时才是可取的。
d$year[d$year==105]
x <- as.Date('2005/01/01')
d <- as.POSIXlt(x)
d$year <- d$year+3
result <- as.Date(d)