1

次のテストデータフレームがあります。

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  

私が行ったことは、最初に A & B が発生した回数のカウントを見つけ、この場合は = 4 で、それを 2 に分割し、2 番目の列を更新してそれに応じてインクリメントすることです。4 つの 1 は 1,2 になり、4 つの 2 は 3,4 になりました。これが SAC パラダイムに適合することはわかっていますが、ddply でそれを行う方法を考えています。何か提案はありますか?よろしくお願いします

4

1 に答える 1

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取り組み、算術演算を行うことは確かに解決策につながりますが、次の仮定があなたが望むものを説明している場合:

  • 2 行ごとに +1 ずつ増加
  • AとBは常に偶数である

それから私は要点がわかりません...に適用rep(x, each=2)するdことは仕事をします!

于 2012-09-20T14:02:22.247 に答える