将特定数量的随机行分配到 R 中的数据集中

Assign a specific number of random rows into datasets in R

我有一个包含 54285 个观测值的数据集。我需要的是将 50% 的行随机分配到另一个数据框中,30% 分配到另一个数据集中,其余 (20%) 分配到另一个数据框中。这应该在没有重复的情况下完成。 这是一个例子:

data<-data.frame(numbers=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
data
1
2
3
4
5
6
7
8
9
10
我期望的是:

df1
5
3
8
1
7

df2
2
4
9

df3
6
10

将比率乘以数据集中的行数和 split 数据以将它们划分为单独的数据帧。

set.seed(123)
result <- split(data, sample(rep(1:3, nrow(data) * c(0.5, 0.3, 0.2))))
names(result) <- paste0('df', seq_along(result))
list2env(result, .GlobalEnv)

df1

#   numbers
#1        1
#3        3
#7        7
#9        9
#10      10

df2
#  numbers
#4       4
#5       5
#8       8

df3
#  numbers
#2       2
#6       6

对于使用 sampleprob 参数的大型数据帧也应该有效。但是,请注意,这可能不会像上面的 rep 答案那样为您提供您期望的确切行数。

result <- split(data, sample(1:3, nrow(data), replace = TRUE, prob = c(0.5, 0.3, 0.2)))