R 从数据帧中获取非采样行

R Take Non-sampled Rows from a Data Frame

提问人:Hack-R 提问时间:10/9/2014 最后编辑:Hack-R 更新时间:10/9/2014 访问量:578

问:

在 R 中,我可以随机抽取数据帧的一半行,如下所示:

data(iris);  model_data <- iris
data  <- model_data
half  <- (nrow(model_data))%/%2
train <- model_data[sample(nrow(model_data), half), ]

但是,我还需要一种简单的方法来获取未采样的行,并将它们放在另一个调用验证的对象中。val

r 随机

评论

0赞 Rich Scriven 10/9/2014
s <- sample(nrow(model_data), half); val <- model_data[-s,]如果没有可重现的例子,这就是我所能建议的全部内容
0赞 Hack-R 10/9/2014
@RichardScriven 我认为具体数据并不重要,但要使其可重现,您可以添加 .我现在将测试您的解决方案。谢谢!data(iris); model_data <- iris
0赞 Rich Scriven 10/9/2014
每次我这样做时,我都会花 4 个小时在我的答案评论中试图弄清楚 OP 真正想要什么,坦率地说,我已经厌倦了这样做:)
0赞 Hack-R 10/9/2014
@RichardScriven 很公平。您想添加您的答案作为解决方案吗?我在虹膜数据和我的真实数据上进行了尝试。它肯定会选择正确的行数来放入新对象中。我不能 100% 确定它是否真的选择了非采样行,但这就是它看起来的样子,你的解决方案对我来说看起来不错......

答:

1赞 Rich Scriven 10/9/2014 #1

你可以写一个函数来保持和在一起,也许是这样的trainval

foo <- function(data) {
    samp <- sample(nrow(data), nrow(data)/2)
    list(train = data[samp,], val = data[-samp,])
}
foo(mtcars)
foo(iris)