web-dev-qa-db-ja.com

Rの日付から月を抽出する方法

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

何が間違っているのか分かりません。

23
apps92

?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を参照してください。 「標準の明確な形式」は、

デフォルトの形式は、ISO 8601国際標準の規則に従います。この標準では、先頭にゼロを使用して、日付を「2001-02-28」、時刻を「14:01:02」として表します。

37
tonytonov

外部パッケージの必要なし:

日付が次の形式の場合:

myDate = as.POSIXct("2013-01-01")

次に、月番号を取得するには:

format(myDate,"%m")

そして、月の文字列を取得するには:

format(myDate,"%B")
30
RockScience

あなたはそれを日付形式に変換することができます-

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"
10
Jitesh Khurana

彼女は別のR baseアプローチです:

あなたの例から:いくつかの日付:

Some_date<-"01/01/1979"

私たちはRに「それは日付だ」と言った

Some_date<-as.Date(Some_date)

月を抽出します。

months(Some_date)

output: [1] "January"

最後に、数値変数に変換できます。

as.numeric(as.factor(months(Some_date)))

outpt: [1] 1
2
Cro-Magnon