如何在data.table中对每个组中的数据进行采样? (尽可能快)

时间:2016-12-08 15:14:23

标签: r performance data.table

我正在尝试在How do you sample random rows within each group in a data.table?中对每个组中的数据进行采样 数据:

set.seed(245)
DT = data.table( d = sample(1:2000), m = sample(1:700, 2000, replace = T))

DT[,length(unique(m))]
[1] 669
DT[,length(unique(d))]
[1] 2000

1)首先,方法DT[, .SD[sample(.N, 1)], by = m]不够快,我确信它可以更快更好地完成,但更快的方法,在之前的链接帖子中提到

DTs <- DT[DT[, sample(.I, 1), by=m][[2]],]
DTs[, .N]
[1] 659    
DTs[, length(unique(d))]
[1] 633

无效,我不明白为什么(DTs[, d]中的每个元素都应该是唯一的。)

2)其次,当我尝试不同的方法(仅提取d值)时:

DT[, sample(d, 1L), by = m][[2]]

我注意到每次获得不同长度的唯一值,并且它们的长度不符合预期:

length(unique(DT[, sample(d, 1L), by = m][[2]]))
[1] 632
length(unique(DT[, sample(d, 1L), by = m][[2]]))
[1] 638

有人可以解释为什么会这样吗?或者我做错了什么?如何以最快的方式做到这一点?

0 个答案:

没有答案