选择随机行,同时保持原始数据分布的比例?

Vij*_*jay 0 r data.table

考虑我有以下data.table

d <- data.table(group=rep(letters[1:5],c(30,20,20,20,10)), x=1:100, y=101:201)
Run Code Online (Sandbox Code Playgroud)

表示分配为5个组的数据

d[,.N,by=group]
Run Code Online (Sandbox Code Playgroud)

现在,我如何选择一个小样本,比方说10行(或10%的数据),它基本上具有基于一列或多列的类似组分布.因此,对于上表,我可以接收的假设子集类似于:

  group   x    y
   a      8  108
   b     32  132
   e     93  193
   b     46  146
   d     88  188
   c     53  153
   c     68  168
   a     19  119
   d     74  174
   a     24  124
Run Code Online (Sandbox Code Playgroud)

我最好如何在data.table中执行此操作?有一个关于SO一个问题在这里讨论这件事,但我宁愿没有手动计算分配的百分比.

Dam*_*ini 5

我想你应该用caret.该createDataPartition()函数用于对数据集进行子集化,而不会丢失目标变量的概率分布.

library(caret)
my.ids <- createDataPartition(d$group, p = 0.1)
train <- d[as.numeric(my.ids[[1]]), ]
Run Code Online (Sandbox Code Playgroud)

您可以在总体和子集中检查目标变量的分布.

par(mfrow = c(1,2))
barplot(table(d$group), main = "full dataset")
barplot(table(train$group), main = "subset")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述