0

私はRに少し問題があり、私のスキルはどういうわけか限られています. 前の行に基づくデータ フレームで 2 つの計算を実行したいと考えています。最初のものはカウント変数です。さらに、現在の行と前の行の差を計算したいと考えています。

私の問題を明確にする最も簡単な方法は、小さな例だと思います:

次の表を想像してみてください。この表は 2 つの列のみで構成されています。userは顧客番号でtimeあり、特定のユーザーのトランザクションの時間です。

次に、サンプル テーブルで指定されているように、2 つの新しい列を作成します。

  1. 単純にユーザーのトランザクションをカウントするカウンター変数countは、実際のユーザーのトランザクションの実際の数を示します。

  2. diff (time [s])現在のトランザクションと前のトランザクションの間の時間差 [秒] である変数。したがって、時間 [i] - 時間 [i-1] のようになりますが、新しいユーザーごとに計算をゼロからやり直す必要があります。明らかに、各ユーザーの最初のトランザクションの時間差は計算できません。

この問題をループで解決しようとしましたが、テーブルが非常に大きく、完全なデータ セットの計算を終了したくありませんでした。

user    time    count   diff(time[s])
A   10:00:00    1   
A   10:30:00    2   1.800
A   12:00:00    3   5.400
A   13:00:00    4   3.600
B   14:00:00    1   
C   15:00:00    1   
C   16:00:00    2   3.600
C   17:00:00    3   3.600
4

1 に答える 1

0

パッケージを使用するplyrと、データのラングリングに関しては非常に簡単になります。ベース R でこれやその他の変換を行う方法はありますが、一貫性のないインターフェイスを持つさまざまな機能がごちゃごちゃになっています。

library(plyr)
ddply(df, .(user), transform, count=seq_len(time), diff=c(0, diff(time)))
于 2013-07-30T20:24:46.957 に答える