我正在使用lubridate
包,并应用month
函数从日期中提取月份。我对日期字段运行str命令,得到的结果是
Factor w/ 9498 levels "01/01/1979","01/01/1980",..: 5305 1 1 1 1 1 1 1 1 1 ...
> v1$Date<-month(v1$Date)
Error in as.POSIXlt.character(as.character(x), ...) :
character string is not in a standard unambiguous format
下面是我的数据框架的一个例子
https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing
我不知道我做错了什么。
?月
指出:
日期-时间必须是POSIXct, POSIXlt, Date, Period, chron, yearmon、 yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, and fts 对象。
你的对象是一个因子,甚至不是一个字符向量(可能是因为stringsAsFactors = TRUE
)。你必须将你的向量转换为某种日期时间类,例如转换为POSIXlt
:
library(lubridate)
some_date <- c("01/02/1979", "03/04/1980")
month(as.POSIXlt(some_date, format="%d/%m/%Y"))
[1] 2 4
还有一个方便的函数dmy
,可以做同样的事情(提示由@Henrik提出):
month(dmy(some_date))
[1] 2 4
更进一步,@IShouldBuyABoat给出了另一个提示,即接受dd/mm/yyyy字符格式,而不需要任何明确的铸造:
month(some_date)
[1] 2 4
关于格式的列表,见?strptime
。你会发现"标准明确的格式"代表了
默认格式遵循ISO 8601国际格式的规则。 标准,将一天表示为"2001-02-28",将时间表示为 "14:01:02"使用前导零,如这里。
不需要外部包:
如果你的日期是以下格式:
myDate = as.POSIXct("2013-01-01")
那么要得到月号:
format(myDate,"%m")
然后获得月份字符串:
format(myDate,"%B")
你可以通过以下方式将其转换为日期格式
new_date<- as.Date(old_date, "%m/%d/%Y")}
从 "new_date "中,你可以通过 "strftime() "得到月份。
month<- strftime(new_date, "%m")
。
old_date<- "01/01/1979"
new_date<- as.Date(old_date, "%m/%d/%Y")
new_date
#[1] "1979-01-01"
month<- strftime(new_date,"%m")
month
#[1] "01"
year<- strftime(new_date, "%Y")
year
#[1] "1979"