R将数据随机分成两部分
R split data into 2 parts randomly
我正在尝试将我的数据框随机分成两部分。例如,我想随机将 70% 的数据放入一个数据框中,将另外 30% 的数据放入另一个数据框中。有没有快速的方法来做到这一点?原始数据框中的行数超过 800000。我尝试使用 for 循环,从行数中选择一个随机数,然后使用 rbind() 将该行绑定到第一个(70%)数据框并将其从原始数据框中删除以获得另一个 (30%) 数据框。但这非常慢。有没有相对较快的方法可以做到这一点?
尝试
n <- 100
data <- data.frame(x=runif(n), y=rnorm(n))
ind <- sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.7, 0.3))
data1 <- data[ind, ]
data2 <- data[!ind, ]
我正在以 ExperimenteR 的答案为基础,它看起来很可靠。然而,一个问题是 sample
函数有点奇怪,因为它使用的概率不是完全确定的。以此为例:
>sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.7, 0.3))
您会期望 TRUE
和 FALSE
值的数量分别恰好为 70 和 30。通常情况并非如此:
>table(sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.7, 0.3)))
FALSE TRUE
34 66
如果您不希望非常精确,这没关系。但是,如果您想要 正好 70% 和 30%,则改为这样做:
v <- as.vector(c(rep(TRUE,70),rep(FALSE,30))) #create 70 TRUE, 30 FALSE
ind <- sample(v) #Sample them randomly.
data1 <- data[ind, ]
data2 <- data[!ind, ]
我正在尝试将我的数据框随机分成两部分。例如,我想随机将 70% 的数据放入一个数据框中,将另外 30% 的数据放入另一个数据框中。有没有快速的方法来做到这一点?原始数据框中的行数超过 800000。我尝试使用 for 循环,从行数中选择一个随机数,然后使用 rbind() 将该行绑定到第一个(70%)数据框并将其从原始数据框中删除以获得另一个 (30%) 数据框。但这非常慢。有没有相对较快的方法可以做到这一点?
尝试
n <- 100
data <- data.frame(x=runif(n), y=rnorm(n))
ind <- sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.7, 0.3))
data1 <- data[ind, ]
data2 <- data[!ind, ]
我正在以 ExperimenteR 的答案为基础,它看起来很可靠。然而,一个问题是 sample
函数有点奇怪,因为它使用的概率不是完全确定的。以此为例:
>sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.7, 0.3))
您会期望 TRUE
和 FALSE
值的数量分别恰好为 70 和 30。通常情况并非如此:
>table(sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.7, 0.3)))
FALSE TRUE
34 66
如果您不希望非常精确,这没关系。但是,如果您想要 正好 70% 和 30%,则改为这样做:
v <- as.vector(c(rep(TRUE,70),rep(FALSE,30))) #create 70 TRUE, 30 FALSE
ind <- sample(v) #Sample them randomly.
data1 <- data[ind, ]
data2 <- data[!ind, ]