2012-04-09 10 views
1

私は以下のテストデータフレームを持っています。データ変換のためのddply

id1 val 
A 1 
A 1 
A 1 
A 1 
B 2 
B 2 
B 2 
B 2 

私は以下のようにデータフレームに変換したいと考えています。私がやった

id1 val 
A 1 
A 1 
A 2 
A 2 
B 3 
B 3 
B 4 
B 4 

この場合= 4で、最初の& Bが発生回数のカウントを見つけることで、分割その2へとそれに応じてインクリメントされますように、第2の列を更新します。したがって、4つの1は1,2になり、4つの2は3,4になります。私はこれがSACのパラダイムに合っていることを知っていますが、ddplyでそれをやり遂げる方法は不思議です。何か提案してください?おかげで非常に事前に

答えて

1

まず、のはあなたのサンプルオブジェクトを取得してみましょう:

d <- data.frame(id1= c(rep("A",4), rep("B",4)), val=c(rep("1",4), rep("2",4))) 

あなたが望むように見える何をするための便利な方法は、単純に行うには、次のようになります。

> d$val <- rep(1:(nrow(d)/2), each=2) 
> d 
    id1 val 
1 A 1 
2 A 1 
3 A 2 
4 A 2 
5 B 3 
6 B 3 
7 B 4 
8 B 4 

そして、それはそれです。

分割適用結合アプローチを使用する理由は、具体的には列値の組み合わせに依存する番号付けを持つことです。 ddplyを使用すると、id1valに応じて行を分割することができ、およびナンバリングの異なるタイプの取得のために:

f <- function(x){ rep(1:(length(x)/2), each=2) } 
ddply(d, .(id1), transform, val = f(val)) 

    id1 val 
1 A 1 
2 A 1 
3 A 2 
4 A 2 
5 B 1 
6 B 1 
7 B 2 
8 B 2 

fの定義に取り組んで算術演算を行うことを希望確かソリューションにあなたを導くが、以下の場合仮定は、あなたが欲しいものを説明します。

  • +1の増分ごとに2行
  • AとBは常に偶数で発生

ポイントが表示されません... 〜dを応募してください!

関連する問題