2017-10-25 14 views
0

chrを数値に変換しようとしています。私が変換しようとしている数字は「20171023063155.557」です。 as.numeric関数を使用すると、20171023063155.559が返されます。私はいくつかの方法を試しましたが、正しく変換することはできません。chrを数値に変換する

ご協力いただければ幸いです。

as.POSIXct("20171023063155.557", format = "%Y%m%d%H%M%OS") 
[1] "2017-10-23 06:31:55 PDT" 
> as.POSIXct("20171023063155.557", format = "%Y%m%d%H%M%S") 
[1] "2017-10-23 06:31:55 PDT" 
+1

はその日付ですか?そのような場合は、 'as.POSIXct' –

+3

を試してみてください。数値は日付として解釈されず、「通常」の数字として解釈されます。違いの理由はここで説明します:https://stackoverflow.com/questions/ 22466328/how-to-working-with-with-r –

+0

解決策:代わりに 'POSIXlt'を使います:y < - as.POSIXlt(" 20171023063155.557 "、format ="%Y%m%d%H%M %OS ");フォーマット(y、 "%Y-%m-%d%H:%M:%OS6") –

答えて

2

あなたの文字列は実際にタイムスタンプのようです。私はあなたがそれをそのように扱うことを提案します。ここで一つのオプションはas.POSIXctを使用して日付に変換するために、次のようになります。

x <- "20171023063155.557" 
y <- as.POSIXct(x, format = "%Y%m%d%H%M%OS") 

POSIXctオブジェクトを使用すると手に、あなたが今簡単に、例えば、あなたのタイムスタンプに関する情報を抽出することができます

weekdays(y, FALSE) 
months(y, FALSE) 
[1] "Monday" 
[1] "October" 

そのミリ秒の精度の情報が実際にPOSIXctオブジェクトに格納されている、我々は確認するformatを呼び出すことができ確認します

format(y, "%Y-%m-%d %H:%M:%OS6") 
[1] "2017-10-23 06:31:55.556999" 
+0

正解、タイムスタンプです。しかし、このコードはミリ秒を保持しません。これは私の結果にとって重要です。何かご意見は? – user8829384

+0

これは実際には次のようになります: '20171023063155'?もしそうなら、フォーマットマスクを '%Y%m%d%H%M%S'に変更してください。 –

+1

私は質問を編集し、あなたが私に与えた機能を使用しました。どちらの方法でも、私はミリ秒かかることはありません。 – user8829384

0

問題は、32を使用することによって課される「丸め」の差でありますビット浮動小数点数(クラスfloat)と有効桁Rのデフォルト数は、印刷するように構成されています

x <- as.numeric("20171023063155.557") 
x 
# [1] 2.017102e+13 
getOption("digits") 
# 7 
options(digits=22) 
x 
# [1] 20171023063155.55859375 

をだから目を変更しますe digitsオプションとあなたはあなたの番号が(ほとんど;-)正しく変換されているのを見ることができます...

+0

関数がないと思いますそれは正確にそれを変換するだろうか? – user8829384

+1

浮動小数点演算は必ずしも正確ではありません。おそらく、あなたの質問を編集して、なぜあなたのアプリケーションに関係するのかを教えてください。 –

+0

多分浮動小数点オプションを微調整することができます( '?.Machine'を参照してください)。しかし、これは浮動小数点数を使用する場合、Rのプログラミング言語ではなくRの技術的制限です。それを正確に変換する:-( –

関連する問題