我将用一个假设情景来说明这个问题。下面是一个音乐家及其演奏乐器的表格,以及一个乐队作品的表格。
为避免关于谁最擅长哪种乐器的争论,乐队将通过抽签方式组成。以下是我进行的方式:
问题是:由于有演奏多个乐器的音乐家,可能会出现一个人被抽中多次的情况。
可以建立一个 for 循环,在每个后续的乐器子集中抽取音乐家,然后将其从表的其他部分中删除。但我希望能够借助 data.table 来解决这个问题,并且更好地理解 data.table 语法。主要是因为我需要用这种逻辑解决实际生活中涉及数十万行数据的数据库问题。此外,我尝试了 Andrew Brooks 博客中的一些 技巧,但没有找到解决方案。
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 语法。主要是因为我需要用这种逻辑解决实际生活中涉及数十万行数据的数据库问题。此外,我尝试了 Andrew Brooks 博客中的一些 技巧,但没有找到解决方案。