もう一度ごめんなさい。引き続き試してみますが、次の 1 時間以内に解決できない場合に備えて、助けが必要です。
私のデータは次のようになります。
B<-data.frame(ID=c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2),EVID=c(1,1,1,0,1,2,2,1,1,1,2,2,1,1,1),VALUE=seq(15))
B$TIME<-c(Sys.time()+6*3600*(seq_len(nrow(B))-1))
実際には時間はより変動し、各 ID には 2 の EVID が複数ある場合があります。
EVID=2 の時間間隔を 1 時間刻みで追加したいと考えていました。つまり、EVID=2 のペアごとに、2 番目の EVID=2 に 1 時間以内になるまで 1 時間を追加します。ペアで、次のようなものを取得できます:(値とIDは前の行の複製です)
ID EVID VALUE TIME
1 1 1 1 2013-05-31 07:51:09
2 1 1 2 2013-05-31 13:51:09
3 1 1 3 2013-05-31 19:51:09
4 1 0 4 2013-06-01 01:51:09
5 1 1 5 2013-06-01 07:51:09
6 1 2 6 2013-06-01 13:51:09
6 1 2 6 2013-06-01 14:51:09
6 1 2 6 2013-06-01 15:51:09
6 1 2 6 2013-06-01 16:51:09
6 1 2 6 2013-06-01 17:51:09
6 1 2 6 2013-06-01 18:51:09
7 1 2 7 2013-06-01 19:51:09
8 1 1 8 2013-06-02 01:51:09
9 2 1 9 2013-06-02 07:51:09
10 2 1 10 2013-06-02 13:51:09
11 2 2 11 2013-06-02 19:51:09
11 2 2 11 2013-06-02 20:51:09
11 2 2 11 2013-06-02 21:51:09
11 2 2 11 2013-06-02 22:51:09
11 2 2 11 2013-06-02 23:51:09
11 2 2 11 2013-06-02 0:51:09
12 2 2 12 2013-06-03 01:51:09
13 2 1 13 2013-06-03 07:51:09
14 2 1 14 2013-06-03 13:51:09
15 2 1 15 2013-06-03 19:51:09
以下は私のブレインストーミング/試みです:
library(data.table)
BDT <- data.table(row=1:nrow(B), B, key="ID")
BDT[,list(row,EVID,c(EVID)==2)]
attach(B)
newB<-BDT[c(EVID)==2,list(row=row+1,ID=ID,EVID=EVID,VALUE=VALUE,TIME=head(TIME+3600,-1))]
finalB<-rbind(BDT,newB)[order(EVID,decreasing=TRUE)][order(row)][,-1,with=FALSE]
ただし、これにより、各 EVID=2 に Time+1 時間の行が 1 行追加されますが、これは私が望んでいたものではありません。
次に試したのは、最初の行の後にすべての行を複製することでした。これは私が望んでいたものではありませんが、列のすべての名前を入力する手間を省けるという利点があります (約 32 あります)。
newB<-B[c(1,rep(2:nrow(B),each=2)),]
## My wild guess -- as.numeric(head(TIME))-as.numeric(tail(TIME)))/3600 doesn't work. I know it says that from row 2 to last row, repeat each row twice
newB[c(FALSE,TRUE),"EVID"]<-2
newB[c(FALSE,TRUE),"TIME"]<-newB[c(FALSE,TRUE),"TIME"]+3600
フィードバックをお寄せいただきありがとうございます。
================================================== ===============
エディのコードは私の例でうまく機能します。これは良い表現だと思いましたが、実際のデータは取得し続けます
seq.int(...) のエラー 'by' 引数の符号が間違っています
(...)私が試していたことによって異なります
比較的大きなデータがあります。例のように ID として使用する列はデータ テーブルの中央にあります。リスト内の他の名前と一緒に ID を配置すると、小さなサンプル データからでも、R はアイテム 2 が rbind のアイテム 1 よりも n+1 列を持っていると認識します。しかし、by=ID を使用できるようにリストに含めないと、R は名前の順序が異なると文句を言います。データの先頭に重要でない列の 1 つがリストされていない場合、R は項目 2 が項目 1 と比較して n-1 列を持っていると言います!
おそらく私のエラーは、時間が正確に数時間離れていないことに起因すると思いましたが、テストの実行により、小さな違いが許容され、時間に丸めたり、整数を実行したりしても役に立たないことがわかりました。
警告を無視して、length.out を使用してみました
警告メッセージ: In .rbind.data.table(...) : Argument 2 の名前の順序が異なります。ベースとの一貫性のために、列は名前でバインドされます。または、(名前のないリストを使用して) 名前を削除すると、列が位置によって結合されます。または、use.names=FALSE を設定します。
しかし、コードは、追加が多すぎる最後を除いて、2 の間に追加されません!
私は何を間違っていますか?私はこれのために一晩中引っ張ってきました:(
元のデータを再配置すると、警告を取り除くことができます。ただし、挿入はまだデータの最後でのみ行われており、多すぎます。