gpt4 book ai didi

r - 使用data.table按组抽样而不重复

转载 作者:行者123 更新时间:2023-12-04 22:55:07 25 4
gpt4 key购买 nike

我将使用一个假设的场景来说明这个问题。这是一张表,上面有音乐家和他们演奏的乐器,还有一张表,上面有乐队的作曲:

musicians <- data.table(
instrument = rep(c('bass','drums','guitar'), each = 4),
musician = c('Chas','John','Paul','Stuart','Andy','Paul','Peter','Ringo','George','John','Paul','Ringo')
)

band.comp <- data.table(
instrument = c('bass','drums','guitar'),
n = c(2,1,2)
)

为了避免争论谁最适合哪种乐器,乐队将通过抽签组装。这是我的做法:
musicians[band.comp, on = 'instrument'][, sample(musician, n), by = instrument]

instrument V1
1: bass Paul
2: bass Chas
3: drums Andy
4: guitar Paul
5: guitar George

问题是:由于有演奏不止一种乐器的音乐家,因此可能会发生一个人被多次绘制的情况。

可以构建一个 for 循环,为每个后续的乐器子集绘制音乐家,然后从表格的其余部分中删除音乐家。但我想就如何使用 data.table 执行此操作提出建议。主要是因为我在现实生活中需要用这种逻辑解决的那种问题涉及数十万行的数据库。也因为我试图更好地理解 data.table 语法。

作为引用,我尝试了一些 tips from Andrew Brooks blog ,却想不出解决办法。

最佳答案

这可以是一个解决方案,首先您按音乐家选择乐器,然后选择样本的音乐家。但是,当为每个音乐家选择乐器时,您的样本量可能大于总体,那么您可能会得到一个错误(但在您的真实数据中,这可能不是问题)。

musicians[, .(instrument = sample(instrument, 1)), by = musician][band.comp, on = 'instrument'][, sample(musician, n), by = instrument]

关于r - 使用data.table按组抽样而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51719432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com