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