[解決済み] 文字ベクトルをPOSIXct/POSIXltに変換するためのas.POSIXct/as.POSIXltとstrptimeの相違点
質問
ここで、文字ベクトルをdatetimeクラスに変換する方法について尋ねる質問をいくつか追ってきました。strptimeとas.POSIXct/as.POSIXltの2つのメソッドをよく見かけます。私は2つの関数を見ましたが、何が違うのかが不明です。
strptime
function (x, format, tz = "")
{
y <- .Internal(strptime(as.character(x), format, tz))
names(y$year) <- names(x)
y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>
as.POSIXct
function (x, tz = "", ...)
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>
as.POSIXlt
function (x, tz = "", ...)
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>
マイクロベンチマークを行い、性能差があるかどうかを確認する。
library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 5000, replace = TRUE)
df <- microbenchmark(strptime(Dates, "%d-%m-%Y"), as.POSIXlt(Dates, format = "%d-%m-%Y"), times = 1000)
Unit: milliseconds
expr min lq median uq max
1 as.POSIXlt(Dates, format = "%d-%m-%Y") 32.38596 33.81324 34.78487 35.52183 61.80171
2 strptime(Dates, "%d-%m-%Y") 31.73224 33.22964 34.20407 34.88167 52.12422
strptimeは少し速いようです。では、なぜ似たような関数が2つあるのでしょうか?それとも私が見落としている違いがあるのでしょうか?
どのように解決するのですか?
さて、関数によってできることが違います。
まず、日付/時刻の内部実装は2つあります。
POSIXct
これは UNIX のエポックからの秒数 (+他のデータ) を格納します。
POSIXlt
は、日、月、年、時、分、秒などのリストを格納します。
strptime
は、(様々な形式の)文字ベクトルを直接
POSIXlt
形式に変換する関数です。
as.POSIXlt
は、様々なデータ型を
POSIXlt
. これは、知的で、賢明なことを行おうとします - 文字の場合、それは
strptime
.
as.POSIXct
は、様々なデータ型を
POSIXct
. これはまた、知的で、賢明なことを行おうとします - 文字の場合、それは実行されます
strptime
を最初に実行し、次に
POSIXlt
から
POSIXct
.
というのは意味があります。
strptime
の方が速いのは理にかなっています。
strptime
は文字入力のみを処理し、他のものは入力の種類から使用するメソッドを決定しようとするからです。また、予期しないデータが渡された場合、望んだものでないかもしれない知的なことをしようとするのではなく、単にエラーが発生するだけなので、少し安全であるはずです。
関連
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
R: 環境と変数のスコープ問題
-
[解決策】 plot.new() のエラー:図の余白が大きすぎる。
-
[解決済み] Rで2つのグラフを同じプロットで表示する
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] リストやデータフレームの要素にアクセスするためのブラケット[ ]とダブルブラケット[[ ]]の違いについて
-
[解決済み] Ruby on Railsで、DateTime、Timestamp、Time、Dateの違いは何ですか?
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み】RubyのDateTimeとTimeの違いについて
-
[解決済み】安定したマッピングを持つggplot2のカテゴリ変数に色を割り当てるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R言語のエラーメッセージと関連する解決策
-
Rでエラー:単項演算子への引数が無効
-
[R] is.data.frame(x) のエラー : (リスト) オブジェクトを 'double' 型に強制できない。
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
R言語における共通関数
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] 空のdata.frameを作成する
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み] データフレームのカラムのデータ型を決定する
-
[解決済み] セッションが作成されません。このバージョンのChromeDriverはChromeバージョンにしか対応していません ChromeDriver ChromeでSeleniumを使用した場合の74エラー