将数据分为60%,20%,20%

时间:2017-05-23 09:37:46

标签: r validation split dataset training-data

我正试图从2组数据转移到3组,如上面的问题所述。以下是我使用的脚本:

set.seed(125)
d <- sample(x = nrow(db), size = nrow(db) * 0.60, )
train60 <-db[d, ]
valid40 <-db[-d, ]

有没有办法修改上面的脚本?我试图创建另一行:

valid40 <- db[-d] * 0.2无效。

当前数据集有几个因子变量。

我尝试在cut函数上使用Frank's solution here,但不知怎的,我设法得到了

  

cut.default(seq(nrow(df)),nrow(df)* cumsum(c(0,spec))出错,   labels = names(spec)):&#39; break的长度&#39;和&#39;标签&#39;不同

即使在网上寻求帮助后我也不明白。

2 个答案:

答案 0 :(得分:3)

如果我理解正确,那么你想要60%,20%和20%的样本分叉而不重复。我已经为一个包含150行和5列的示例获取了虹膜数据。

samp <- sample(1:nrow(iris),.6*nrow(iris)) ##60 and 40 bifurcation

train60 <- iris[samp,] ## This is the 60% chunk
remain40 <- iris[-samp,]  ## This is used for further bifurcation

samp2 <- sample(1:nrow(remain40),.5*nrow(remain40))

first20 <- remain40[samp2,] ## First chunk of 20%
secnd20 <- remain40[-samp2,] ## Second Chunk of 20%

Reduce("intersect",list(train60,first20,secnd20)) ##Check to find if there is any intersect , 0 rows means everything is fine and sample are not repetitive.

答案 1 :(得分:2)

db <- data.frame(x=1:10, y=11:20)

set.seed(125)
d <- sample(x=nrow(db),size=nrow(db)*0.60,)

train60 <-db[d,]

valid40 <-db[-d,]

现在,只需在每个新数据帧中获取有效值的一半:

e <- sample(x=nrow(valid40),size=nrow(valid40)*0.50,)

train20 <-valid40[e,]
valid20 <- valid40[-e,]