如何在R中将只有一年的日期转换为格式为“年-月-日”的日期

时间:2018-11-02 09:38:42

标签: r date

很抱歉,我一个月前开始使用RStudio,但遇到了从未学过的事情。在过去的两天里,我检查了所有可能的网站,帮助和论坛,这让我发疯。

我有一个名为Release的变量,给出了歌曲发行的日期。一些日期遵循%Y-%m-%d格式,而另一些仅给我年份。 我希望它们都一样,但是我只能用年份修改观测值。

文字摘要:

11/11/2011
01/06/2011
1974
1970
16/09/2003

我已使用:

导入了数据
music<-read.csv("music2.csv", header=TRUE, sep = ",", encoding = "UTF-8",stringsAsFactors = F)

这就是我在RStudio中的使用方式

"2011-11-11" "2011-06-01" "1974" "1970" "2003-09-16" 

这是一个示例,因为我有2200个肥胖。

工作代码是

Modifdates<- ifelse(nchar(music$Release)==4,paste0("01-01-",music$Release),music$Release)
Modifdates

我得到了:

"2011-11-11" "2011-06-01" "01-01-1974" "01-01-1970" "2003-09-16" 

我只是希望它们都具有相同的格式“%Y-%m-%d”。我该怎么办?

所以我尝试了

as.Date(music$Release,format="%Y-%m-%d")

但是我在NA上修改了日期。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

欢迎来到SO,请下次尝试提供可复制的示例,以便我们为您提供最佳帮助。 我认为您可以在这里使用:

testdates <- c("1974", "12-12-2012")
betterdates <- ifelse(nchar(testdates)==4,paste0("01-01-",testdates),testdates)
> betterdates
[1] "01-01-1974" "12-12-2012"

编辑:如果向量是因数,则应首先使用as.character.factor。如果您随后想要转换回因子,则可以使用as.factor

EDIT2:在执行此操作之前请勿转换as.date。只能在修改后做

答案 1 :(得分:1)

更新

使用sub查找由一年("(^[0-9]{4}$)"部分)组成的日期,并使用向后引用替换它,以在字符串的末尾添加-01-01({{1} }部分),最后使用"\\1-01-01"将其转换为date类(as.Date()的默认值为as.Date(),因此您无需指定它):

format = "%Y-%m-%d"
dat <- c("2011-11-11", "2011-06-01", "1974", "1970", "2003-09-16") 类是dat
character
as.Date(sub("(^[0-9]{4}$)", "\\1-01-01", dat)) # "2011-11-11" "2011-06-01" "1974-01-01" "1970-01-01" "2003-09-16" 类是dat,但是factor会自动将其强制转换为sub类:
character