如何从多个列表(数字?

时间:2018-10-30 10:09:40

标签: r list sampling

我想采样一下,假设65岁以上的100个人的年龄, 年龄段的概率如下:

65-74<- 0.56
75-84<- 0.30
85<- 0.24

我知道示例函数的存在,我尝试如下进行操作,但是不幸的是,该方法没有起作用

list65_74<-range(65,74)
list75_84<-range(75,84)
list85<-range(85,100)

age<-sample(c(list65_74,list75_84,list85),size=10,replace=TRUE,prob =c(0.56,0.30,0.24 ))I get the following error

然后我得到以下错误

 Error in sample.int(length(x), size, replace, prob) : 
      incorrect number of probabilities

所以我想知道从多个列表中采样的正确方法是什么。 提前非常感谢您!

1 个答案:

答案 0 :(得分:1)

首先,让我将这三个对象称为 groups ,因为它们不使用list函数。

您定义它们的方式可能不错,但是例如65:74c(65, 74)更直接。因此,最终我将这三个组放在以下列表中:

groups <- list(group65_74 = 65:74, group75_84 = 75:84, group85 = 85:100)

现在使用sample的第一个问题是您的x参数值,

  

一个或多个可供选择的元素的向量,或者   正整数。参见“详细信息”。

与此同时,您x只是

c(list65_74, list75_84, list85)
# [1]  65  74  75  84  85 100

最后,prob的值不合适。您向6个候选样本的向量提供3个数字。听起来不对。相反,您需要为每个组的每个年龄分配适当的概率,如

rep(c(0.56, 0.30, 0.24), times = sapply(groups, length))

这样结果就是

sample(unlist(groups), size = 10, replace = TRUE, 
       prob = rep(c(0.56, 0.30, 0.24), times = sapply(groups, length)))
# [1] 82 72 69 74 72 72 69 70 74 70