0

次のようなデータフレームがあります。

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

また、名前が に一致する要素のリストdf$B、つまり、これらの値は からの値の順列ですdf$B。例を次に示します。

 ll <- list('1'=c(0.1,0.1,0.4,0.2,0.1,0.4),
            '2'=c(0.1,0.1,0.5,0.7,0.5,0.7),
            '3'=c(0.1,0.1,0.2,0.2,0.2,0.5))

リスト内dfの値に対応するデータフレームに新しい列を作成する方法はありますが、同時にそれらはからサンプリングされた値ですか? これは、より良い説明のための望ましい出力ですdf$Bllll

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

1 に答える 1

1

このように多分:

cbind(df, t(sapply(df$B, function(i, l) sample(l[[as.character(i)]]), l = ll))

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

または、誤解した場合は「順列」を明確にしてください。

于 2013-06-24T23:45:03.433 に答える