Мы удалим data.frame и изменим наш вектор prob
на лету, чтобы он имел соответствующую длину.
df <- data.frame(c("A","B","A"), c(1,2,3), c("q","v","z"), stringsAsFactors = F)
n <- 5
set.seed(1)
unname(sample(unlist(df), n, replace = TRUE, prob= rep(prob, each = nrow(df))))
# [1] "3" "1" "A" "z" "2"
Если вы действительно начинаете с матрицы, а не с data.frame
, это немного короче:
df=cbind(c("A","B","A"),c(1,2,3),c("q","v","z"))
set.seed(1)
sample(df, n, replace = TRUE, prob= rep(prob, each = nrow(df)))
# [1] "3" "1" "A" "z" "2"
Из списка (отвечая на комментарии)
l =list(c("A","B"),c(1,2,3),c("q","v","z","w"))
set.seed(1)
sample(unlist(l), n, replace = TRUE, prob= rep(prob/lengths(l), lengths(l)))
# [1] "3" "2" "1" "v" "3" "B" "q"