如何在施加条件的情况下获取数据子集?

How to get a subset of data with conditions imposed?

假设我们有一个公司的支出数据,其中我们有与不同项目相关的不同支出值。怎样抽样才能让样本中的支出总额占原来总支出(人口数据)的一定比例(比如80%)?求助!

为可重复性设置种子:

set.seed(12345)

正在创建一些示例数据,包含 100 个项目:

dat <- data.frame(proj = 1:100,
                exp = sample(100:1000, 100, replace = TRUE))
totalexp <- sum(dat$exp)

随机排序数据

ord <- sample(1:nrow(dat),nrow(dat))
dat <- dat[ord,]

加上每个项目占总支出的百分比:

dat$exp.prop <- dat$exp/totalexp

计算这些比例的累计总和:

dat$exp.cumsum <- cumsum(dat$exp.prop)

找到累计总和最先超过80%阈值的项目的索引,并将您的项目样本作为该索引之前的所有项目:

proj.sample <- dat$proj[1:(which(dat$exp.cumsum>0.80)[1]-1)]

proj.sample
 [1]  30  62  96  60  51  86  97  81  24  20  55  35  67  34  69  77  83  49   1  26  45
[22]  41   7  53  54  61  70  14  21  90   3  47  56  80  63  57  88  12  78  50  32  79
[43]  13  36   9  85  76  27  48  19  42  28  39  17  10  65  31  98  64  25 100  92  33
[64]  44  73  18  87   6  71  58  40  38  72  68  46  43  95  22