r-将数据拆分为列车,并在标签上进行分层测试



我有一个包含两列(数字和字母(的数据帧(df(。参见可复制示例:

Numbers<- c(2.370653,3.811336,5.255120, 6.501197,7.848100,9.343938,10.843479,12.164387,13.476807,14.922644,16.419281,17.664224,19.112835,20.660367,21.962732,23.213675)
Letters<-c("a","b","c","c","d","a","b","d","d","a","a","c","b","c","c","c")
df <- as.data.frame(cbind(Numbers,Letters))

我希望随机将数据帧拆分为大小相等的两个日期帧,每个日期帧中的字母数相同。我发现了layeried((函数,它用每个字母的50%进行采样:

test <- stratified(df, "Letters", .5)

但这实际上并不等同于将数据帧拆分为两个数据帧。我不希望两个数据帧中的df$Numbers中有任何相同的值——只是每个数据帧中有相同数量的df$Letters。你能帮我吗?

rsample中尝试这种方法,它接近您想要的。@AllanCameron的评论是完全有效的,您可以将三个样本分成两个,每个样本1.5个:

library(rsample)
#Code
set.seed(123)
split_strat <- initial_split(df, prop = 0.5,
strata = 'Letters')
train_strat <- training(split_strat)
test_strat <- testing(split_strat)

检查比例:

table(train_strat$Letters)
a b c d 
2 2 3 2 
table(test_strat$Letters)
a b c d 
2 1 3 1 

最新更新