我有以下矩阵:

 Mat1 <- structure(c("Procedure_B", "Procedure_C", "Procedure_B", NA, 
"Procedure_B", "Procedure_A", "Procedure_C", "Procedure_B", NA, 
"Procedure_B", NA, "Procedure_B", NA, NA, "Procedure_A", "Procedure_A", 
"Procedure_C", "Procedure_A", "Procedure_A", "Procedure_B", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_B", "Procedure_A", "Procedure_A", 
NA, NA, "Procedure_C", NA, "Procedure_C", NA, "Procedure_A", 
"Procedure_B", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_B", 
"Procedure_A", "Procedure_B", "Procedure_C", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_C", "Procedure_C", "Procedure_A", NA, 
NA, NA, NA, NA, NA, "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", "Procedure_A", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", "Procedure_B", 
"Procedure_B", "Procedure_B", "Procedure_B", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", "Procedure_C", 
"Procedure_C", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA), dim = c(53L, 5L))

我想从每一行中抽取一个值,其概率如下:

P = c(0.99, 0.002992, 0.003186, 0.003018, 0.000804)

即,对于每一行,其5个值中的每一个具有这些概率

预期输出为53个值.

我试过:

sample(Mat1, size = nrow(Mat1), prob = rep(P, nrow(Mat1)), replace = T)

然而,结果并不符合预期的分布. 我不想在循环/应用中这样做,因为我的矩阵可以有很多行.

这个命令有什么问题?

推荐答案

  • 您可以对列索引进行采样,并根据采样的列数从矩阵中提取值.

  • 该方法是矢量化的.

set.seed(1)

cols <- sample(1:ncol(Mat1), size = nrow(Mat1), replace = TRUE, prob = P)
Mat1[cbind(1:nrow(Mat1), cols)]

#  [1] "Procedure_B" "Procedure_C" "Procedure_B" NA            "Procedure_B"
#  [6] "Procedure_A" "Procedure_C" "Procedure_B" NA            "Procedure_B"
# [11] NA            "Procedure_B" NA            NA            "Procedure_A"
# [16] "Procedure_A" "Procedure_C" "Procedure_B" "Procedure_A" "Procedure_B"
# [21] "Procedure_C" "Procedure_C" "Procedure_C" "Procedure_B" "Procedure_A"
# [26] "Procedure_A" NA            NA            "Procedure_C" NA           
# [31] "Procedure_C" NA            "Procedure_A" "Procedure_B" "Procedure_A"
# [36] "Procedure_A" "Procedure_A" "Procedure_B" "Procedure_A" "Procedure_B"
# [41] "Procedure_C" "Procedure_B" "Procedure_B" "Procedure_B" "Procedure_C"
# [46] "Procedure_C" "Procedure_A" NA            NA            NA           
# [51] NA            NA            NA

R相关问答推荐

如何在R中构建一个将数字变量作为列名的函数?

将日期时间格式从chr转换为r中的日期时间

最优收敛

想要创建一个可以存储四个多元正态总体的多元偏度的载体

将收件箱变量传递给ggplot 2函数

在R中,将一个函数作为输入传递给另一个函数时进行参数判断

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

R:更新后无法运行控制台

根据R中两个变量的两个条件删除带有dspirr的行

R Highcharts与两个位置关联的注释

derrr summarise每个组返回多行?

lightgbm发动机在tidymmodels中的L1正则化""

根据文本字符串中的值粘贴新列

try 将 colored颜色 编码添加到ggploly的标题中

仅 Select 超过9行的CSV文件

有没有可能用shiny 的书签恢复手风琴面板?

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

远离理论值的伽马密度曲线下面积的近似

在R中的数据框上使用Apply()函数时,如何保留非数字列?

如何提取R中其他字符串和数字之间的字符串?