使用sample()函数应用于一系列列

时间:2017-11-30 14:47:29

标签: r simulation apply sample sapply

我有一个名为“prob”的data.frame,有3列概率。

              A              B         C

1         0.346          0.629     0.026

2         0.377          0.529     0.094

3         0.454          0.495     0.051

4         0.338          0.604     0.058

5         0.616          0.331     0.054

我想从每行(A,B,C)中抽取一个项目。所以我应用以下功能:

sapply(prob[,2:5], 
       function(p) sample(x = c(0:2), size = 1, prob = p))

R返回错误:

  

sample.int中的错误(长度(x),大小,替换,概率):不正确   概率数

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

df <- structure(list(A = c(0.346, 0.377, 0.454, 0.338, 0.616), B = c(0.629, 0.529, 0.495, 0.604, 0.331), C = c(0.026, 0.094, 0.051, 0.058, 0.054)), .Names = c("A", "B", "C"), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))
apply(df, 1, function(x) sample(names(df), 1, prob = x))

输出

 1   2   3   4   5 
"B" "C" "A" "A" "B"