包含每个因子至少一个实例的随机子集 [英] Random subset containing at least one instance of each factor

查看:38
本文介绍了包含每个因子至少一个实例的随机子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我们定义一个3列10行的 data.frame df.第三列是类,前两个是一些变量.

Let's define a data.framedf with 3 columns and 10 rows. The third column is the class and the two first some variables.

var1 <- rnorm(10)
var2 <- rnorm(10,2)
class<- as.factor(c(1,2,3,1,2,1,2,1,3,3))
df   <- data.frame(var1=var1,var2=var2,class=class)

如何将 df 随机分为两个子集,以使sub.df1和sub.df2至少具有每个类的一个实例?

How to randomly subset df in two subsets so that sub.df1 and sub.df2 have at least one instance of each class?

推荐答案

这有效:

set.seed(123)
partition <- function(x, n = 2) sample(c(1:n, sample(1:n, length(x) - n, TRUE)))
split(df, as.integer(ave(df$class, df$class, FUN = partition)))

# $`1`
#          var1      var2 class
# 4   1.6674610 3.3886789     1
# 7  -0.2245588 0.8284845     2
# 8  -1.1481185 4.1586492     1
# 10 -0.4712463 3.1846324     3
# 
# $`2`
#         var1       var2 class
# 1  0.9884264  3.3487054     1
# 2 -0.1549679 -0.5815586     2
# 3  1.4484692  0.3521933     3
# 5  0.5454097  2.0405363     2
# 6  1.0971626  0.6410492     1
# 9 -1.3042283  3.3235418     3

这篇关于包含每个因子至少一个实例的随机子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆