私は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
何が間違っているのかわかりません。
?月`の状態になります。
Dat-timeは、POSIXct、POSIXlt、Date、Period、chron、yearmonでなければなりません。 yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, and 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
もあります (Tip proposed by @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:00-16:00"と表現します。 日は"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"