R中组变量的不同比率的分层随机抽样

时间:2018-03-08 14:36:22

标签: r random

我做了一个简单的例子来说明我想要实现的目标。 假设我有这个数据框:

x <- data.frame(a=1:10,b = factor(c("a","a","a","a","a","b","b","b","b","b")),
            gender = factor(c("boy","girl","boy","girl","girl","boy","boy","boy","girl","boy")))

数据框有10个观测值。 40%的女孩,60%的男孩。 50%a,50%b。

我希望能够形成一个随机样本来保持样本中所选关键变量的比例,所以在这种情况下我希望在我的样本中,女孩的比例为40%,男孩的比例为60 %,也是50%,和b 50%。 我怎样才能做到这一点?我在互联网上找到的例子都假设所有变量都有一个共同的比例,这对我的目的不利。 谢谢!

1 个答案:

答案 0 :(得分:2)

如对足够大的样本的评论中所述,子样本中的比率应该相似。对于较小的数据集,这是一种方法:

library(tidyverse)
library(caret)

创建一个组,这是两个因素的相互作用,并根据这个分裂。由于您的样本非常小,因此无法产生确切的比例(没有方法可以):

x %>%
  select(b, gender) %>%
  group_by(b, gender) %>%
  group_indices() -> ind

split1 <- createDataPartition(as.factor(ind), p = 0.5)[[1]]

table(x[split1,2])
#output
a b 
2 2 

table(x[split1,3])
#output
 boy girl 
   3    1 

有两倍大的数据集:

x <- rbind(x, x)

x %>%
  select(b, gender) %>%
  group_by(b, gender) %>%
  group_indices() -> ind

split1 <- createDataPartition(as.factor(ind), p = 0.5)[[1]]

table(x[split1,2])
#output
a b 
5 5 

table(x[split1,3])
#output
 boy girl 
   6    4 

尝试其他比例:

split1 <- createDataPartition(as.factor(ind), p = 0.7)[[1]]

table(x[split1,2])
#output
a b 
8 8 

table(x[split1,3])
#output
 boy girl 
   9    7