将特定数量的随机行分配到 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
对于使用 sample
和 prob
参数的大型数据帧也应该有效。但是,请注意,这可能不会像上面的 rep
答案那样为您提供您期望的确切行数。
result <- split(data, sample(1:3, nrow(data), replace = TRUE, prob = c(0.5, 0.3, 0.2)))
我有一个包含 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
对于使用 sample
和 prob
参数的大型数据帧也应该有效。但是,请注意,这可能不会像上面的 rep
答案那样为您提供您期望的确切行数。
result <- split(data, sample(1:3, nrow(data), replace = TRUE, prob = c(0.5, 0.3, 0.2)))