【发布时间】:2021-07-05 16:03:55
【问题描述】:
感谢您对此问题的关注。
我有如下数据。
a<- data.frame("Grade"=c(1, 2, 3, 4), "Prob"=c(0.01, 0.25, 0.45, 0.29))
b<- data.frame("Pot"= c(letters[1:18]))
基于下面的代码,我想制作一个函数,它可以根据 Prob 概率 (replace=TRUE) 循环 4 个等级数字和具有相同概率 (replace=FALSE) 的四个随机字母。例如,这个循环可能如下所示:
3 2 3 2 d f k g
1 3 4 2 a k r b
我想做一个函数,它不仅可以计算成绩结果仅低于 3 的结果,而且我选择的四个字母出现,而且可以计算得到这个结果的试验次数。因此,如果我希望 Pot 具有“a”、“b”、“c”和“d”,结果将如下所示:
Trial Grade Pot
15 3 2 1 3 a b c d
39 2 1 2 2 d b a c
2 3 3 3 3 d a b d
77 3 2 3 3 c d b a
感谢一位非常友善的人,我可以学习以下代码,但我无法对其进行编辑以获得我希望看到的结果。你能帮帮我吗?
samplefun <- function(a) {
c <- sample(a$Grade, size=4, prob=a$Prob, replace=TRUE)
res <- tibble(
Trial = which(c < 3)[1],
Result = c[which(c < 3)[1]]
)
nsamples <- 1000
x<-map_dfr(1:nsamples, ~ samplefun(a))
感谢您阅读此问题。
【问题讨论】:
-
如果您尝试使用
a$Prob中的概率对b$Pot进行采样,则会出现错误,因为a$Prob的长度与b$Pot不匹配。您能否在数据框b中提供另一列概率,或者修改您的问题以避免此问题?
标签: dataframe function loops sample