R-方法は:カウント私はこの形式のデータフレーム<code>df</code>を持っているRで
a b id
1 2 1234758
1 1 1234758
3 5 1234759
5 5 1234759
5 5 1234759
2 2 1234760
私は、各id値についてdf$a
とdf$b
間の変化を観察する回数をカウントします。私はその後、
summary <- as.data.frame(table(df$id))
id n_id
2 1234758
3 1234759
1 1234760
をした私はIDごとに倍のaとbの変化の数を計算するためにこれを書いただけでなくIDのいくつかの数字に興味を持っていますので
(両方df
とsummary
が順にソートされていますdf
に各IDが表示される時間の数を各エントリを調べid
)
summary$jumps <- 0
k <- 1
for(i in 1:nrow(summary)) {
n <- summary$n_id[i]
for(j in k:k+n-1) if(df$a[j] != df$b[j]) summary$jumps[i] <- summary$jumps[i] + 1
k <- k + n
}
、及びBをチェックし、要約内の適切なエントリを更新します。これは意図したとおりに動作しますが、それは私には遅く見えます。
私はRをかなり新しくしていますが、Rでこれを行うより効率的な方法は何でしょうか?このコードをどのようにベクトル化しますか?データフレームには約3千万の行があります。
から
aggregate
を使用することができます ' – akrunラブリー、この(CBIND(=!= B)〜ID、DF1、FUN =合計ジャンプ)を見える下の答えに反して、何とか私の観察の3分の1を落とした。また、これには追加のパッケージやdata.tableの変換が必要ないことも嬉しいです。あなたがそれを答えにしたら、これを選ぶだろう。 –
コメントのTHanks。それを解決策として掲示します。 – akrun