目标:将数据帧随机分成3个样本.
这是一个笨重的解决方案:
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,]
Run Code Online (Sandbox Code Playgroud)
必须有一些更容易的东西,也许在一个包中. 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,]
Run Code Online (Sandbox Code Playgroud)
应该这样做.
或者,正如@Frank在评论中所说,您可以split()将原始数据保留为列表的元素:
mycars <- setNames(split(mtcars,ss), c("train","test","cvr"))
Run Code Online (Sandbox Code Playgroud)