我正在尝试在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
有人可以解释为什么会这样吗?或者我做错了什么?如何以最快的方式做到这一点?