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
何が間違っているのか分かりません。
?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」として表します。
外部パッケージの必要なし:
日付が次の形式の場合:
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"
彼女は別の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