Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R按最小单元格大小进行采样_R_Data.table_Sample - Fatal编程技术网

R按最小单元格大小进行采样

R按最小单元格大小进行采样,r,data.table,sample,R,Data.table,Sample,我有包含学生考试成绩信息的“数据”。我想:数一数每所学校的分数,然后取所有学校分数的最小值。像这样: 对于每个学校,计算特定年级的行数。 然后为每个年级找出所有学校的最小值。 最后,我希望根据第2步中找到的最小值进行随机抽样 基本上,在这个基本的例子中,有两所学校,7年级和8年级: 一校7年级得2分,一校8年级得3分 第二学校7年级得1分,第二学校8年级得4分 因此,新的数据包含一所学校一年级和二年级七年级的一个分数,以及一所学校一年级和二年级八年级的三个分数,这些分数是随机抽取的 像这样:

我有包含学生考试成绩信息的“数据”。我想:数一数每所学校的分数,然后取所有学校分数的最小值。像这样:

对于每个学校,计算特定年级的行数。 然后为每个年级找出所有学校的最小值。 最后,我希望根据第2步中找到的最小值进行随机抽样

基本上,在这个基本的例子中,有两所学校,7年级和8年级:

一校7年级得2分,一校8年级得3分

第二学校7年级得1分,第二学校8年级得4分

因此,新的数据包含一所学校一年级和二年级七年级的一个分数,以及一所学校一年级和二年级八年级的三个分数,这些分数是随机抽取的

像这样:

我的尝试:
数据[,.SD[sample(x=.N,size=min(sum(GRADE),.N))],by=(SCHOOL,GRADE)

以下是您对如何一步一步完成的描述

set.seed(1)
data=data.frame(SCHOOL = rep(1:10, each = 1000), GRADE = sample(7:12, r = T, size = 10000),SCORE = sample(1:100, r = T, size = 10000))
如果您有多个类似于
SCORE
-的列,并且希望每个列保持相同的行,那么您可以在尝试中使用
.SD
-like:

library(data.table)
setDT(data)
data[, N := .N, .(SCHOOL, GRADE)]
data[, N := min(N), GRADE]
data[, .(SCORE = sample(SCORE, N)), .(SCHOOL, GRADE, N)][, -'N']

@akrun你有什么建议和想法吗?@Valentin你有什么建议和想法吗?谢谢你介意解释一下你的最后一行吗?它很完美!它按
SCHOOL
GRADE
将行拆分,然后对它们的每一个组合运行一次示例函数,取
N
(我们刚刚计算出)的
分数
s。然后
数据表
为我们神奇地将表格拼凑起来。
[,-'N']
只是删除该列,您可以删除该位以查看其中的内容。非常感谢您,我还有一个问题。如果我有一堆其他变量,如SCORE,但我希望执行与我们相同的操作,即只选择行。是否可以对整个数据帧执行此操作,而不仅仅是“得分”?我在答案中加了一行,改为那样做。
data[, .SD[sample(.N, N)], .(SCHOOL, GRADE, N)][, -'N']