3

R の基本strptime関数が、予期しない出力を提供しています。

これは期待どおりに機能します。

strptime(20130203235959, "%Y%m%d%H%M%S")
# yields "2013-02-03 23:59:59"

これも:

strptime(20130202240000, "%Y%m%d%H%M%S")
# yields "2013-02-03"

...しかし、そうではありません。なんで?

strptime(20130203000000, "%Y%m%d%H%M%S")
# yields NA

アップデート

この値20130204000000は、次のコマンドを使用して Mac 10.7.5 システムで生成したログに表示されました。

➜  ~  echo `date +"%Y%m%d%H%M%S"`
20130204000000

更新 2

lubridateも試しましたが、これが推奨されているようです。

> parse_date_time(c(20130205000001), c("%Y%m%d%H%M%S"))
 1 parsed with %Y%m%d%H%M%S
[1] "2013-02-05 00:00:01 UTC"
> parse_date_time(c(20130205000000), c("%Y%m%d%H%M%S"))
1 failed to parse.
[1] NA

now()...そして、おかしなことに、真夜中に達するのに十分な秒数を追加すると、「00:00:00」が出力されました。

> now() + new_duration(13000)
[1] "2013-02-10 00:00:00 GMT"
4

2 に答える 2

2

日付を解析するときcharacterではなく、使用する必要があります。numeric

> strptime(20130203000000, "%Y%m%d%H%M%S")    # No!
[1] NA
> strptime("20130203000000", "%Y%m%d%H%M%S")  # Yes!
[1] "2013-02-03"

この理由は、私のnumeric値が にキャストされcharacter、桁数が多すぎたためと思われます。

> as.character(201302030000)
[1] "201302030000"
> as.character(2013020300000)
[1] "2013020300000"
> as.character(20130203000000)
[1] "2.0130203e+13"       # This causes the error: it doesn't fit "%Y%m%d%H%M%S"
> as.character(20130203000001)
[1] "20130203000001"      # And this is why anything other than 000000 worked.

ドキュメントから必要なタイプを理解するための簡単なレッスン: R で実行するhelp(strptime)と、下の画像のようなポップアップが表示されます。

  • 赤い矢印は関数の主な引数を指していますが、型を指定していません (これが私が試した理由ですnumeric)。
  • 緑色の矢印は、ドキュメントのタイトルにあるタイプを指しています。

ここに画像の説明を入力

于 2013-02-09T20:41:06.473 に答える
0

あなたは本質的に「ゼロ番目」の秒を求めていますが、これは明らかに存在しません:)

# last second of february 3rd
strptime(20130203235959, "%Y%m%d%H%M%S")

# first second of february 4rd -- notice this 'rounds up' to feb 4th
    # even though it says february 3rd
strptime(20130203240000, "%Y%m%d%H%M%S")

# no such second
strptime(20130204000000, "%Y%m%d%H%M%S")

# 2nd second of february 4th
strptime(20130204000001, "%Y%m%d%H%M%S")
于 2013-02-07T00:05:16.663 に答える