我有一个很大的数据集。我想分成“n”个子数据集,每个子数据集具有相同大小的“s”。然而,如果最后一个数据集不能被数字整除,则它可能小于其他大小。并将它们作为 csv 文件输出到工作目录。
让我们看下面的小例子:
set.seed(1234)
mydf <- data.frame (matrix(sample(1:10, 130, replace = TRUE), ncol = 13))
mydf
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 3 7 1 9 6 4 7 5 8 2 2 2 8
2 5 3 4 6 9 5 3 10 5 8 10 2 10
3 4 6 10 4 4 6 3 4 2 9 9 2 9
4 10 10 9 4 3 7 7 7 10 6 7 10 2
5 10 3 9 3 2 10 9 6 4 4 4 6 3
6 7 2 8 7 5 5 10 10 9 3 7 8 4
7 3 2 2 7 10 9 2 2 10 1 1 10 4
8 3 9 9 7 3 1 7 6 10 3 10 3 2
9 9 3 6 9 3 2 2 3 4 2 9 10 10
10 6 4 3 3 5 9 3 9 10 7 4 6 10
我想创建一个函数,将数据集随机分成 n 个子集(在本例中,大小为 3,因为有 13 列 - 最后一个数据集将有 1 列,其余 4 列,每列有 3 列)并输出为文本文件作为单独的数据集。
这是我所做的:
set.seed(123)
reshuffled <- sample(1:length(mydf),length(mydf), replace = FALSE)
# just crazy manual divide
group1 <- reshuffled[1:3]; group2 <- reshuffled[4:6]; group3 <- reshuffled[7:9]
group4 <- reshuffled[10:12]; group5 <- reshuffled[13]
# just manual
data1 <- mydf[,group1]; data2 <- mydf[,group2]; ....so on;
# I want to write dimension of dataset at fist row of each dataset
cat (dim(data1))
write.csv(data1, "data1.csv"); write.csv(data2, "data2.csv"); .....so on
由于我必须生成 100 个子数据集,是否可以循环该过程?
最佳答案
也许有一个更干净、更简单的解决方案,但您可以尝试以下方法:
mydf <- data.frame (matrix(sample(1:10, 130, replace = TRUE), ncol = 13))
## Number of columns for each sub-dataset
size <- 3
nb.cols <- ncol(mydf)
nb.groups <- nb.cols %/% size
reshuffled <- sample.int(nb.cols, replace=FALSE)
groups <- c(rep(1:nb.groups, each=size), rep(nb.groups+1, nb.cols %% size))
dfs <- lapply(split(reshuffled, groups), function(v) mydf[,v,drop=FALSE])
for (i in 1:length(dfs)) write.csv(dfs[[i]], file=paste("data",i,".csv",sep=""))
关于r - 将数据集拆分为多个数据集,其中包含r中的随机列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10841859/