如何在施加条件的情况下获取数据子集?
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
假设我们有一个公司的支出数据,其中我们有与不同项目相关的不同支出值。怎样抽样才能让样本中的支出总额占原来总支出(人口数据)的一定比例(比如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