R

时间:2018-08-08 23:54:29

标签: r function math subset

我无法缠住这个小脑袋。一个数据框包含观察值,每个观察值都有一个性别和一个年龄段。我正在尝试编写一个函数,该函数返回此数据帧的行的子集,其中每个年龄性别组合的出现比例均大致等于“ props”数据帧中的值。理想情况下,该功能将修剪尽可能少的观测值。结果可以是近似的(通过近似/大致相等,我的意思是每个组在输出中的表示应至少在期望比例的5%之内,并且通常尽可能低)。

ages <- c("18-29", "30-39", "40-49", "50-59","60+")
genders <- c("M","F")

set.seed(101)
df <- data.frame("id" = paste0("p",c(1:500)),
             "gender" = sample(genders, replace=TRUE, size=500),
             "age" = sample(ages, replace=T, size=500))

props <- data.frame("age" = c(ages, ages),
                "gender" = genders,
                "pcts" = c(.0835, .1145, .1145, .1145, .073, .0835, .1145, 
                           .1145, .1145, .073))

select_max <- function(df, props) {

....   

return(subset)
}

我尝试了使用最小公倍数和最大公除数的解决方案,但是当比例不能很好地配合时,这些解体了。我正在考虑一种解决方案,一次添加和减去一行,直到它足够接近所需比例为止,但是我觉得必须有一些更优雅的解决方案。感谢所有帮助。当然,这是一个有趣的过程。

0 个答案:

没有答案