私はそれがあなたが推測した通りであると思いますstrptime
、あなたのロケールのためにあなたの日時文字列を解析するのに失敗します。文字列には、省略された平日(%a
)と省略された月の名前(%b
)の両方が含まれています。これらの時間仕様は次のように説明されてい?strptime
ます。
詳細
%a
:このプラットフォームの現在のロケールでの曜日の省略名
%b
:このプラットフォームの現在のロケールでの月の省略名。
「省略名はプラットフォーム固有であることに注意してください(ただし、標準では、C
ロケールでは、大文字の英語名の最初の3文字である必要があります:」
「またはを入力形式%a
の一部として使用する場合は、略語が何であるかを知ることが不可欠です
。確認方法については、例を参照してください。」%b
%h
も参照してください
[...]locales
ロケールを照会または設定します。
の問題は、、およびlocales
にも関連します。as.POSIXct
as.POSIXlt
as.Date
差出人?as.POSIXct
:
詳細
が指定されている場合format
、一部の形式仕様はロケール固有であり、を
使用してLC_TIME
カテゴリを適切に設定する必要がある場合があることに注意してくださいSys.setlocale
。%b
これは、、%B
(月の名前)および%p
(AM / PM)の使用に最もよく影響します。
差出人?as.Date
:
詳細
文字列との間のロケール固有の変換は、適切で利用可能な場合に使用されます。これは、曜日と月の名前に影響します。
したがって、文字列内の曜日と月の名前が現在のロケールの名前と異なる場合、、は文字列を正しく解析できず、strptime
返されます。as.POSIXct
as.Date
NA
ただし、locales
:を変更することでこの問題を解決できます。
# First save your current locale
loc <- Sys.getlocale("LC_TIME")
# Set correct locale for the strings to be parsed
# (in this particular case: English)
# so that weekdays (e.g "Thu") and abbreviated month (e.g "Nov") are recognized
Sys.setlocale("LC_TIME", "en_GB.UTF-8")
# or
Sys.setlocale("LC_TIME", "C")
#Then proceed as you intended
x <- "Thu Nov 8 15:41:45 2012"
strptime(x, "%a %b %d %H:%M:%S %Y")
# [1] "2012-11-08 15:41:45"
# Then set back to your old locale
Sys.setlocale("LC_TIME", loc)
私の個人的なロケールで、私はあなたのエラーを再現することができます:
Sys.setlocale("LC_TIME", loc)
# [1] "fr_FR.UTF-8"
strptime(var,"%a %b %d %H:%M:%S %Y")
# [1] NA