当前位置:  开发笔记 > 编程语言 > 正文

在R中随机抽样数据帧为3组

如何解决《在R中随机抽样数据帧为3组》经验,为你挑选了1个好方法。

目标:将数据帧随机分成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,]

必须有一些更容易的东西,也许在一个包中. dplyrsample_frac功能,但似乎针对单个样本,而不是分成多个.

关闭,但不是这个问题的答案: R中有多个概率的随机样本



1> Ben Bolker..:

你需要分区准确吗?如果不,

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"))


我会用'split`不输"的轨道EM`mycars = setNames(分割(mtcars,SS),C( "火车", "测试", "CVR"))`
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有