我有一个带有大约的数据框。 1000行,我想将它随机分成8个较小的数据帧,每个数据帧包含100个元素。我试图在数据框上使用sample
函数8次,但有时它会选择相同的行。
答案 0 :(得分:4)
我们通过sample
创建一个分组变量1到8,其中size
作为数据集的行数,split
具有分组变量的行序列list
1}},循环遍历list
(lapply(...
),对数据集进行子集化,并使用head
获取前100行
lst <- lapply(split(1:nrow(df1), sample(1:8, nrow(df1), replace=TRUE, prob = rep(1/8, 8))),
function(i) head(df1[i,],100))
sapply(lst, nrow)
# 1 2 3 4 5 6 7 8
#100 100 100 100 100 100 100 100
正如@RHertel在评论中提到的,我们可以做一秒sample
来获得100行
lst <- lapply(split(1:nrow(df1), sample(1:8, nrow(df1), replace=TRUE, prob = rep(1/8, 8))),
function(i) df1[sample(i, 100, replace=FALSE),])
set.seed(24)
df1 <- data.frame(V1= 1:1000, V2= rnorm(1000))