私は比較的大きなデータセット(16,000+ x〜31)を持っています。言い換えれば、私はそれをExcelで行ごとに操作したくないほど十分です。データは、この形式である:他の列の値に基づいてカウント列を追加する方法R
block site day X1 X2
1 1 1 0.4 5.1
1 1 2 0.8 1.1
1 1 3 1.1 4.2
1 2 1 ... ...
1 2 2
1 2 3
2 3 1
2 3 2
2 3 3
2 4 1
2 4 2
2 4 3
あなたが見ることができるように、サイト数が連続しているが、私は、サイトの数は、各ブロックでリセット列をしたいと思います。例えば、私は以下のようなものたいと思います:
block site day X1 X2 site2
1 1 1 0.4 5.1 1
1 1 2 0.8 1.1 1
1 1 3 1.1 4.2 1
1 2 1 ... ... 2
1 2 2 2
1 2 3 2
2 3 1 1
2 3 2 1
2 3 3 1
2 4 1 2
2 4 2 2
2 4 3 2
を私はR関数RLEを使用して考えていたが、理由は一日で合併症のことがうまくいくかどうかわからないです。そうでなければ、私のような何かをしようとするだろう:
Data$site2 <- sequence(rle(Data$block)$lengths)
誰もが列カウント(シーケンス)各ブロック内のサイトの数を追加するための任意の提案を持っていますか?役立つ場合は、サイトごとに記録された日数は同じですが(263)、ブロックごとに異なるサイト数があります。
ddply(df,.(block),transform,
site1 = rep(1:length(unique(site)),
times = rle(site)$lengths))
それとも少しスリッカーバージョン:
ddply(df,.(block),transform,site1 = as.integer(as.factor(site)))
使用して、しかし、直接これを行うための賢い方法があるかもしれません
が、これは完全に働いた、ありがとうございます。私は前にplyrを見たことがありますが、それを使ったことはありません。 ddplyは完璧ですが、私は実際にマトリックスを分解して、日にちにreshape(=ワイド)を使用し、rle(サイト)を適用してから、再形成しようとしました(= long)。私はそれが動作するかどうかわからないが、私はそれを行うために約1000の簡単な方法があると思った。私はdpdplyのソリューションが好きです。再度、感謝します。 – djhocking
いいね、ちょうど同様の問題でddplyオプションを試してみて初めて完全に働いた – Ell