我正在使用该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
Run Code Online (Sandbox Code Playgroud)
这是我的数据框的一个例子
https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing
我不知道我做错了什么.
ton*_*nov 43
?month 状态:
日期时间必须是POSIXct,POSIXlt,Date,Period,chron,yearmon,yearqtr,zoo,zooreg,timeDate,xts,its,ti,jul,timeSeries和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
Run Code Online (Sandbox Code Playgroud)
还有一个便利功能dmy,可以做同样的事情(由@Henrik提出的提示):
month(dmy(some_date))
[1] 2 4
Run Code Online (Sandbox Code Playgroud)
更进一步,@ IShouldBuyABoat给出了另一个提示,即接受dd/mm/yyyy字符格式而不进行任何显式转换:
month(some_date)
[1] 2 4
Run Code Online (Sandbox Code Playgroud)
有关格式列表,请参阅?strptime.你会发现"标准的明确格式"代表
默认格式遵循ISO 8601国际标准的规则,该规则将日期表示为"2001-02-28",将时间表示为"14:01:02",使用前导零作为此处.
Roc*_*nce 31
无需外部包装:
如果您的日期采用以下格式:
myDate = as.POSIXct("2013-01-01")
Run Code Online (Sandbox Code Playgroud)
然后获取月份数:
format(myDate,"%m")
Run Code Online (Sandbox Code Playgroud)
并获得月份字符串:
format(myDate,"%B")
Run Code Online (Sandbox Code Playgroud)
小智 12
你可以把它转换成日期格式 -
new_date<- as.Date(old_date, "%m/%d/%Y")}
Run Code Online (Sandbox Code Playgroud)
从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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158714 次 |
| 最近记录: |