2016-11-17 4 views
1

私はRの初心者ですので、この質問が以前に答えられたかどうかは分かりません。 (私が正しい形式を守っているかどうか不明な場合はここで初めて質問します。)Rの日付に連続して(条件付きで)ミリ秒を追加するには?

基本的に私のデータのユニークなタイムスタンプに10ミリ秒を連続して追加したいと思います。私はそれが見えるようにしたいどのような

17:30:20.12 
17:30:20.12 
17:30:20.12 
17:30:20.12 
17:30:20.12 
17:30:20.12 
17:31:21.48 
17:31:21.48 
17:31:21.48 
17:31:21.48 
17:31:21.48 
17:31:21.48 

:私のデータがどのように見えるか

17:30:20.12 
17:30:20.13 
17:30:20.14 
17:30:20.15 
17:30:20.16 
17:30:20.17 
17:31:21.48 
17:31:21.49 
17:31:21.50 
17:31:21.51 
17:31:21.52 
17:31:21.53 

はRで可能これですか?前もって感謝します!

答えて

2

はい、非常に可能です。

加算のベクトル、つまりN回0.1秒を作成し、それをあなたの時間列に加えてください。簡体字:

R> now <- Sys.time() 
R> now     # I have options("digits.secs"=6) 
[1] "2016-11-16 21:37:55.502532 CST" 
R> now <- trunc(now) # truncate to 'round' secondss 
R> addThis <- 0.010001 * 0:4 # need some fudge for display 
R> now + addThis 
[1] "2016-11-16 21:37:55.000000 CST" "2016-11-16 21:37:55.010000 CST" 
[3] "2016-11-16 21:37:55.020001 CST" "2016-11-16 21:37:55.030003 CST" 
[5] "2016-11-16 21:37:55.040004 CST" 
R> 

ダブルスの不正確は、ここで私たちに到達するので、私たちは0.01 * 0:4を使用していますが、少し「綿毛」を追加することはできません。実際のアプリケーションでは、必要に応じて調整することができます。

一意性に関する条件は、標準ベクトル操作のトリックで追加することができます。つまり、差異を計算し、ゼロとは異なるためにテストします。それでは、シーケンスなどを得るためにcumsumすることができます。pp。

+0

こんにちは!ありがとう、ミリ秒の加算が働いています。しかし、0.010001 * 0:4を使用する別の方法がありますか?タイムスタンプの各グループの観測数は異なります。前もって感謝します! :) – yjrtcjc

+0

はい、それはインクリメントベクトルのイラストです。私の最後の段落を見てください。その部分を解決する必要があります。あなたのサンプルテーブルはありません。 –

0

あなたのデータがdata.frameの列であるとすれば、私はdata.tableが好きです。

まず、データをread.table()というdata.frameに読み込みます。次に、タイムスタンプをPOSIXctクラスの新しい列(V2)に設定します。最初に任意の日を追加します(Rに日付がない時間などがあるかどうかはわかりません)。次いで、(.Nを有する観測の各グループの長さでdata.table

library(data.table) 
    x$V2 <- as.POSIXct(paste("2016-11-16", x$V1)) 
    setDT(x) 
    x[, V3 := V2 + (0:.N)/10, by=V2] 

最後に、参照することによって、新しい列を設定するdata.table構文を使用して、我々は.N 0からベクトルを得ることができるようdata.frameを設定しますby=で指定された列の同じ値、この場合はV2)。次に、そのベクトルを10で除して、0から始まるミリ秒を取得し、それをV2の元の時間に加算します。

関連する問題