按最小像元大小的 R 样本
R Sample By Minimum Cell Size
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))
我有 'data',其中包含有关学生考试成绩的信息。我希望:统计每所学校有多少个GRADE,然后对所有学校取GRADE的最小值。像这样:
对于每个学校,计算特定年级的行数。
然后为每个年级找到所有学校中的最小值。
最后,我希望根据步骤 2 中找到的最小值进行随机抽样。
所以基本上在这个有两个学校和 GRADE 7 和 GRADE 8 的基本示例中:
学校 1 的 7 年级分数为 2,学校 1 的八年级分数为 3。
学校 2 的 7 年级分数为 1,学校 2 的 8 年级分数为 4。
因此,新数据包含 SCHOOL 1 和 SCHOOL 2 的 GRADE 7 的一个 SCORE,以及 SCHOOL 1 和 SCHOOL 2 的 GRADE 8 的三个 SCORE,这些被挑选的 SCORE 是随机抽样的。
像这样:
我的尝试:
data[ .SD[sample(x = .N, size = min(sum(GRADE), .N))], by = .(SCHOOL,GRADE]
这遵循您对操作方法的描述 step-by-step。
library(data.table)
setDT(data)
data[, N := .N, .(SCHOOL, GRADE)]
data[, N := min(N), GRADE]
data[, .(SCORE = sample(SCORE, N)), .(SCHOOL, GRADE, N)][, -'N']
如果您有多个类似 SCORE
的列,并且您希望每个列都保留相同的行,那么您可以像尝试那样使用 .SD
:
data[, .SD[sample(.N, N)], .(SCHOOL, GRADE, N)][, -'N']
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))
我有 'data',其中包含有关学生考试成绩的信息。我希望:统计每所学校有多少个GRADE,然后对所有学校取GRADE的最小值。像这样:
对于每个学校,计算特定年级的行数。 然后为每个年级找到所有学校中的最小值。 最后,我希望根据步骤 2 中找到的最小值进行随机抽样。
所以基本上在这个有两个学校和 GRADE 7 和 GRADE 8 的基本示例中:
学校 1 的 7 年级分数为 2,学校 1 的八年级分数为 3。
学校 2 的 7 年级分数为 1,学校 2 的 8 年级分数为 4。
因此,新数据包含 SCHOOL 1 和 SCHOOL 2 的 GRADE 7 的一个 SCORE,以及 SCHOOL 1 和 SCHOOL 2 的 GRADE 8 的三个 SCORE,这些被挑选的 SCORE 是随机抽样的。
像这样:
我的尝试: data[ .SD[sample(x = .N, size = min(sum(GRADE), .N))], by = .(SCHOOL,GRADE]
这遵循您对操作方法的描述 step-by-step。
library(data.table)
setDT(data)
data[, N := .N, .(SCHOOL, GRADE)]
data[, N := min(N), GRADE]
data[, .(SCORE = sample(SCORE, N)), .(SCHOOL, GRADE, N)][, -'N']
如果您有多个类似 SCORE
的列,并且您希望每个列都保留相同的行,那么您可以像尝试那样使用 .SD
:
data[, .SD[sample(.N, N)], .(SCHOOL, GRADE, N)][, -'N']