如何用R data.table随机抽取2个学生并保留其全部数据?
问题:从data.table中随机抽取指定数量的学生及其全部数据
原始数据表DATA和目标结果表WANT如下:
DATA = data.table(STUDENT = c(1,1,2,2,2,2,2,3,3,3,3,3,4), SCORE = c(5,6,8,3,14,5,6,9,0,12,13,14,19)) WANT = data.table(STUDENT = c(1,1,4), SCORE = c(5,6,19))
需求说明:从DATA中随机抽取2个STUDENT,并保留这些学生的所有数据(上述WANT是其中一种可能的结果)。
我尝试了以下代码,但未达到预期效果:
WANT = WANT[ , .SD[sample(x = .N, size = 2)], by = STUDENT]
正确解法
你的代码逻辑有误——它是对每个学生分组后,从每组内随机抽取2行数据,而不是先筛选出2个学生再取他们的全部数据。正确的写法应该是先随机选中2个唯一的学生ID,再从原表中提取这些学生的所有记录:
分步写法:
# 随机抽取2个不重复的学生ID selected_students <- sample(unique(DATA$STUDENT), size = 2) # 筛选出这些学生的全部数据 WANT <- DATA[STUDENT %in% selected_students]
链式简洁写法:
WANT <- DATA[STUDENT %in% sample(unique(STUDENT), 2)]
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

