考虑我有以下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一个问题在这里讨论这件事,但我宁愿没有手动计算分配的百分比.
我想你应该用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)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |