【发布时间】:2018-08-07 05:31:56
【问题描述】:
我将使用一个假设场景来说明这个问题。这是一张放着音乐家和他们演奏的乐器的桌子,还有一张放着乐队作曲的桌子:
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,但无法提出解决方案。
【问题讨论】:
标签: r data.table