2013-05-06 142 views
5

我希望R将一列标识为日期。它在导入过程中被看作是因素,但是,当我尝试使用'as.Date'和'format'进行格式化时,我只获得了NAs。我不确定我要去哪里错。将日期格式化为格式“%Y-%m”的问题

> d = read.table("ByMonth.Year_54428.txt", header=T, sep=",") 
> str(d) 
'data.frame': 607 obs. of 2 variables: 
$ V1 : Factor w/ 607 levels "1950-12","1951-01",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ Rain: int 100 56000 29293 37740 19649 41436 58067 51082 49629 62680 ... 
> 
> 
> Date.form1 <- as.Date(d$V1, "%Y-%m") 
> str(Date.form1) 
Date[1:607], format: NA NA NA NA NA NA NA NA NA NA NA NA NA NA ... 
> 
> Date.form2 = as.Date(as.character(d$V1), format="%Y-%m") 
> str(Date.form2) 
Date[1:607], format: NA NA NA NA NA NA NA NA NA NA NA NA NA NA ... 

回答

14

一年零一个月没有约会。你还需要一天。

d <- data.frame(V1=c("1950-12","1951-01")) 
as.Date(paste(d$V1,1,sep="-"),"%Y-%m-%d") 
# [1] "1950-12-01" "1951-01-01" 

您还可以使用zoo包中的yearmon类。

library(zoo) 
as.yearmon(d$V1) 
# [1] "Dec 1950" "Jan 1951" 
+0

啊,谢谢!我不知道as。date也需要一天,因为我通过使用:ByMonth.Year = rowsum(out $ rain_fall,format(out $ Date,“%Y-%m”))'不使用一天。再次感谢! – KG12 2013-05-07 09:46:04

+0

当然'as.Date'需要一天的时间。如果我问你,“你哪天出生?”,你不会回答,“1950年12月”。正如它在'?format'的_Value_部分所说的,'format'将它的对象转换为一个字符向量。 – 2013-05-07 13:17:20