目标:将数据帧随机分成3个样本.
一个样本有60%的行
其他两个样本有20%的行
样品不应与其他样品重复(即样品无需更换).
这是一个笨重的解决方案:
allrows <- 1:nrow(mtcars) set.seed(7) trainrows <- sample(allrows, replace = F, size = 0.6*length(allrows)) test_cvrows <- allrows[-trainrows] testrows <- sample(test_cvrows, replace=F, size = 0.5*length(test_cvrows)) cvrows <- test_cvrows[-which(test_cvrows %in% testrows)] train <- mtcars[trainrows,] test <- mtcars[testrows,] cvr <- mtcars[cvrows,]
必须有一些更容易的东西,也许在一个包中. dplyr
有sample_frac
功能,但似乎针对单个样本,而不是分成多个.
关闭,但不是这个问题的答案: R中有多个概率的随机样本
你需要分区准确吗?如果不,
set.seed(7) ss <- sample(1:3,size=nrow(mtcars),replace=TRUE,prob=c(0.6,0.2,0.2)) train <- mtcars[ss==1,] test <- mtcars[ss==2,] cvr <- mtcars[ss==3,]
应该这样做.
或者,正如@Frank在评论中所说,您可以split()
将原始数据保留为列表的元素:
mycars <- setNames(split(mtcars,ss), c("train","test","cvr"))