【问题标题】:Divide data set into 60%, 20%, 20%将数据集划分为 60%、20%、20%
【发布时间】:2017-10-23 04:29:12
【问题描述】:

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

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

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

valid40 &lt;- db[-d] * 0.2 不起作用。

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

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

cut.default(seq(nrow(df)), nrow(df) * cumsum(c(0, spec)) 中的错误, label = names(spec)) : 'breaks' 和 'labels' 的长度不同

即使在线搜索帮助后我也不明白。

【问题讨论】:

  • 样本 50 % of valid40? .. 样本(valid40,nrow(valid40)/2).
  • 也可以看看modelr::crossv_mc

标签: r validation split dataset training-data


【解决方案1】:
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,]

现在只需在每个新数据帧中取一半 valid40:

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

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

【讨论】:

    【解决方案2】:

    如果我对您的理解正确,那么您需要 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.
    

    【讨论】:

    • @halfer:对在问题中添加“紧急”表示歉意。
    • 嗨 Jeppe & Pkr :非常感谢您用提供的详细解释回答我的“遇险”电话,这对新手非常有帮助。两个脚本都运行良好!我想对你的两个答案都投票,但不确定系统是否允许。
    猜你喜欢
    • 2016-07-17
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多