我正在使用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
我不知道我做错了什么。
答案 0 :(得分:36)
?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
还有一个便利功能dmy
,可以做同样的事情(@Henrik提出的提示):
month(dmy(some_date))
[1] 2 4
更进一步,@ IShouldBuyABoat给出了另一个提示,即接受dd / mm / yyyy字符格式而不进行任何明确的转换:
month(some_date)
[1] 2 4
有关格式列表,请参阅?strptime
。您会发现&#34;标准的明确格式&#34;代表
默认格式遵循ISO 8601国际规则 表示一天的标准为&#34; 2001-02-28&#34;和时间一样 &#34; 14:01:02&#34;在这里使用前导零。
答案 1 :(得分:26)
无需外部包装:
如果您的日期采用以下格式:
myDate = as.POSIXct("2013-01-01")
然后获取月份编号:
format(myDate,"%m")
获得月份字符串:
format(myDate,"%B")
答案 2 :(得分:8)
您可以通过 -
将其转换为日期格式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"
答案 3 :(得分:1)
她是另一种R base
方法:
从您的示例:某个日期:
Some_date<-"01/01/1979"
我们告诉R,&#34;这是一个日期&#34;
Some_date<-as.Date(Some_date)
我们提取月份:
months(Some_date)
output: [1] "January"
最后,我们可以将它转换为数值变量:
as.numeric(as.factor(months(Some_date)))
outpt: [1] 1
答案 4 :(得分:0)
在一段时间内,您还只能依靠mov ax,48AF
mov ds,ax
mov [bx+0103],dh
mov dl,[si+010C]
mov ax,4C00
int 21
软件包及其data.table
类以及相关函数。 (检查IDate
)。因此,无需额外安装?as.IDate()
。
lubridate