从矩阵中按行采样

问题描述 投票:0回答:2

我有以下矩阵:

Mat1 <- structure(c(NA, NA, NA, "Reusable", "Single-use", NA, "Reusable", 
"Single-use", NA, "Reusable", "Single-use", NA), dim = 3:4)

我想从每一行中采样一个值,具有以下常数概率:

P = c(0.5, 0.2412, 0.2397, 0.0191) i.e. for each row sample each of its 4 values with these probabilities

预期输出为 3 个值。

我尝试过:

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

但是结果不符合预期分布。 我不想在循环/应用中执行此操作,因为我的矩阵可以有很多行。

这个命令有什么问题?

r sample
2个回答
0
投票

默认情况下,矩阵上的运算是按列应用的,因此您需要先转置矩阵:

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

0
投票

您可以利用

apply
功能来实现此目的:

apply(Mat1, 1, sample, prob=c(0.5, 0.2412, 0.2397, 0.0191), size=1)

1
表示您要为每一行使用一个函数,然后您必须为每一行指定要执行的函数。就您而言,它是
sample
。之后,您必须指定示例函数的参数。

© www.soinside.com 2019 - 2024. All rights reserved.