如何从R中提取月份

时间:2014-03-24 07:58:53

标签: r lubridate

我正在使用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

我不知道我做错了什么。

5 个答案:

答案 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