Javascript - 分层抽样
Javascript - Stratified Sampling
我有一个这样的 json 数据源:
var ds=[{"id":1,"group":"A"},{"id":2,"group":"C"},{"id":3,"group":"B"},{"id":4,"group":"A"},{"id":5,"group":"C"},{"id":6,"group":"B"},{"id":7,"group":"A"},{"id":8,"group":"C"},{"id":9,"group":"B"},{"id":10,"group":"A"},{"id":11,"group":"C"}];
假设每组至少有m条记录(这里m=3),我想从每组中随机抽取n(n<=m)条记录并将样本合并到一个新数组中,如下所示:
var output=[{"id":1,"group":"A"},{"id":7,"group":"A"},{"id":3,"group":"B"},{"id":6,"group":"B"},{id":2,"group":"C",{"id":11,"group":"C"}]
有什么算法可以处理这种情况?
是的,您可以使用 lodash 非常干净地完成此操作:
var output = _(ds) //begin chaining syntax
.groupBy("group") //split into groups
.map(function(group) { //for each group
return _.sample(group, n); //sample n items randomly
})
.flatten() //flatten array of arrays into a single array
.value(); //end chaining syntax
我有一个这样的 json 数据源:
var ds=[{"id":1,"group":"A"},{"id":2,"group":"C"},{"id":3,"group":"B"},{"id":4,"group":"A"},{"id":5,"group":"C"},{"id":6,"group":"B"},{"id":7,"group":"A"},{"id":8,"group":"C"},{"id":9,"group":"B"},{"id":10,"group":"A"},{"id":11,"group":"C"}];
假设每组至少有m条记录(这里m=3),我想从每组中随机抽取n(n<=m)条记录并将样本合并到一个新数组中,如下所示:
var output=[{"id":1,"group":"A"},{"id":7,"group":"A"},{"id":3,"group":"B"},{"id":6,"group":"B"},{id":2,"group":"C",{"id":11,"group":"C"}]
有什么算法可以处理这种情况?
是的,您可以使用 lodash 非常干净地完成此操作:
var output = _(ds) //begin chaining syntax
.groupBy("group") //split into groups
.map(function(group) { //for each group
return _.sample(group, n); //sample n items randomly
})
.flatten() //flatten array of arrays into a single array
.value(); //end chaining syntax