18

「ThuNov815:41:45 2012」の形式でタイムスタンプを解析しようとすると、のみNAが返されます。

Mac OS X、R 2.15.2、Rstudio0.97.237を使用しています。私のOSの言語はオランダ語です:これはそれと関係があると思います。

試してみるとstrptimeNAが返されます:

var <- "Thu Nov 8 15:41:45 2012"
strptime(var, "%a %b %d %H:%M:%S %Y")
# [1] NA

どちらも機能しませんas.POSIXct

as.POSIXct(var, "%a %b %d %H:%M:%S %Y")
# [1] NA

as.Date上記の文字列も試しましたが、%H:%M:%Sコンポーネント はありません。

as.Date("Thu Nov 8 2012", "%a %b %d %Y")
# [1] NA

私が間違っている可能性のあるアイデアはありますか?

4

2 に答える 2

26

私はそれがあなたが推測した通りであると思いますstrptime、あなたのロケールのためにあなたの日時文字列を解析するのに失敗します。文字列には、省略された平日(%a)と省略された月の名前(%b)の両方が含まれています。これらの時間仕様は次のように説明されてい?strptimeます。

詳細

%a:このプラットフォームの現在のロケールでの曜日の省略名

%b:このプラットフォームの現在のロケールでの月の省略名。

「省略名はプラットフォーム固有であることに注意してください(ただし、標準では、Cロケールでは、大文字の英語名の最初の3文字である必要があります:」

「またはを入力形式%aの一部として使用する場合は、略語が何であるかを知ることが不可欠です 。確認方法については、例を参照してください。」%b%h

も参照してください

[...]localesロケールを照会または設定します。

の問題は、、およびlocalesにも関連します。as.POSIXctas.POSIXltas.Date

差出人?as.POSIXct

詳細

が指定されている場合format、一部の形式仕様はロケール固有であり、を 使用してLC_TIMEカテゴリを適切に設定する必要がある場合があることに注意してくださいSys.setlocale%bこれは、、%B(月の名前)および%p(AM / PM)の使用に最もよく影響します。

差出人?as.Date

詳細

文字列との間のロケール固有の変換は、適切で利用可能な場合に使用されます。これは、曜日と月の名前に影響します。


したがって、文字列内の曜日と月の名前が現在のロケールの名前と異なる場合、、は文字列を正しく解析できず、strptime返されます。as.POSIXctas.DateNA

ただし、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
于 2012-12-05T15:48:13.030 に答える
3

lubridate同じ問題をいじくり回していましたが、パッケージにこのジョブを実行するラッパー関数があり、設定するだけでシステム設定を手動で変更する必要がないため、このソリューションの方がはるかにクリーンであることがわかりました。引数locale

date <- c("23. juni 2014", "1. november 2014", "8. marts 2014", "16. juni 2014", "12. december 2014", "13. august 2014")
df$date <- dmy(df$Date, locale = "Danish")
[1] "2014-06-23" "2014-11-01" "2014-03-08" "2014-06-16" "2014-12-12" "2014-08-13"
于 2017-02-05T10:42:12.060 に答える