2

私は次のような data.frame を持っています:(私の実際のデータフレームはもっと大きいです):

df <- data.frame(A=c("a","b","c","d","e","f","g","h","i"), 
               B=c("1","1","1","2","2","2","3","3","3"), 
               C=c(0.1,0.2,0.4,0.1,0.5,0.7,0.1,0.2,0.5))

> df
  A B   C 
1 a 1 0.1 
2 b 1 0.2 
3 c 1 0.4 
4 d 2 0.1 
5 e 2 0.5 
6 f 2 0.7 
7 g 3 0.1 
8 h 3 0.2 
9 i 3 0.5 

列 D がランダムな値になるいくつかの n 列 ( permutationsに似たもの) を追加したいのですdf$Cが、この値は の女性値を持つ行からのみ選択df$Bする必要があります。目的の出力の例は次のようになります。

df <- data.frame(A=c("a","b","c","d","e","f","g","h","i"), 
               B=c("1","1","1","2","2","2","3","3","3"), 
               C=c(0.1,0.2,0.4,0.1,0.5,0.7,0.1,0.2,0.5),
               D=c(0.2,0.2,0.1,0.5,0.7,0.1,0.5,0.5,0.2))

> df
  A B   C   D
1 a 1 0.1 0.2
2 b 1 0.2 0.2
3 c 1 0.4 0.1
4 d 2 0.1 0.5
5 e 2 0.5 0.7
6 f 2 0.7 0.1
7 g 3 0.1 0.5
8 h 3 0.2 0.5
9 i 3 0.5 0.2

パッケージで試しましplyrたが、私のアプローチは正しく機能しません:

ddply(df, levels(.(B)), transform, D=sample(C))

また、に基づいてデータフレームを分割df$Bし、関数を使用して各データフレームに列を追加することも考えlapplyましたが、のレベルを選択する方法がわかりませんdf$B

どうもありがとう

4

1 に答える 1

2

plyrは必要ありません。うまくいきaveます。

transform(df, D=ave(C, B, FUN=function(b) sample(b, replace=TRUE)))
于 2013-06-20T16:33:09.690 に答える