2016-07-26 3 views
0

私は、12/31/199812/--/98の2つの異なる日付形式を持つxという列を持っています。ご覧のとおり、2番目の形式ではdateがなく、yearは2桁です。2つの異なる日付形式からの年の抽出

私のカラムのすべての日付からyearを抽出する必要があります。したがって、Year<- data.frame(format(df$x, "%Y"))を使用している場合は、最初の形式としてyearが返されます。 2番目の形式の場合は、NAを返します。

私はすべての助けに感謝します。ありがとう。

+1

年には4桁の数字が必要ですか、2桁で入力できますか? –

+0

私の 'class'は' data frame'の 'factor'です。しかし、後で '%m /%d /%Y"を使って 'date'形式に変換しています。次の答えで示唆されているように 'basename'を使って私の問題を解決するでしょう。 – Santosh

+0

年が2桁の形式の場合は、データには常に「 - 」が含まれますか? – dayne

答えて

3

より古い日付では動作しませんですフォーマットを入力して、有効な応答を1つだけ保持してください:

vals <- c("12/31/1998", "12/--/98") 
out <- pmax(
     as.Date(vals, "%m/%d/%Y"), 
     as.Date(paste0("01",vals), "%d%m/--/%y"), 
     na.rm=TRUE 
     ) 
format(out, "%Y") 
#[1] "1998" "1998" 
+1

実際、私はこのように考えていました。私は失われたデータの日付を入れようとしていました。これは私が正確に探していた素晴らしい答えです。本当にありがとう。 – Santosh

+0

'12/01/98'の日付はどうですか?年が2桁の形式のときに文字列に常に '--'があるかどうかはわかりません。 – dayne

+0

@dayne - 指定されたOPには2つの形式があります - これは私が知る限り、両方をカバーしています。 – thelatemail

2

「/」の後に最後の数字がある形式の場合は、basenameを使用できます。それからちょうど4年の形式に2文字年転化する必要があります。

vals <- c("12/31/1998", "12/--/98", "68", "69") 
yrs <- basename(vals) 
yrs <- ifelse(nchar(yrs) == 2, format(as.Date(yrs, format = "%y"), "%Y"), yrs) 
yrs 
# [1] "1998" "1998" "2068" "1969" 

問題は、それはあなたが少し創造的な取得と醜いを指定することができ1969年

関連する問題