2

エポックからのタイムスタンプが秒単位のデータセットがあります。

   id      event       time       
2 722     opened 1356931342
1 723     opened 1356963741
4 721 referenced 1356988186
5 721     closed 1356988186
3 721 referenced 1356988206

ただし、多数の非常に長いタイム スタンプを処理すると、使用しているアルゴリズム (最適なマッチング距離) で重大なパフォーマンスの問題が発生するため、これを単純な順序に減らして、どのイベントが最初に発生したか (または同時に発生したか) を決定したいと考えています。 )。つまり、データセット内の最初のイベント (行) は 1、次に 2、3、4 などになります。2 つの行の数値 (エポックからの秒数) がまったく同じ場合は、同じ値を指定する必要があります。新しい縮小形式の番号。したがって、これは次の行に沿って何かを出力する必要があります。

   id      event       time       
2 722     opened       1
1 723     opened       2
4 721 referenced       3
5 721     closed       3
3 721 referenced       4

「時間」列は本質的に数値のベクトルです(要因ではありません-パフォーマンスの問題を解決しようとしているため、これは機能しません)。

以下を使用してデータフレームを注文できます。

df <- df[with(df, order(time)), ]

ただし、番号を順序付けられた 1 桁 (タイム スタンプが等しい場合は同じ番号) に置き換えるにはどうすればよいですか?

4

2 に答える 2

2

時間列を変数として必要とする特定の理由がない限り、次の方法でベクトルを作成するためmatchに andを使用します...uniqueintegerfactor

df$newtime <- match( df$time , unique( df$time ) )
#   id      event       time newtime
#2 722     opened 1356931342       1
#1 723     opened 1356963741       2
#4 721 referenced 1356988186       3
#5 721     closed 1356988186       3
#3 721 referenced 1356988206       4

とにかくfactor使用するためmatchのコード。unique

于 2013-10-30T14:11:54.013 に答える