R:将data.frames拆分为给定数量的小data.frames

时间:2020-06-12 18:39:52

标签: r list dataframe

mydata <- data.frame(var1 = rnorm(10, 0, 1), var2 = rnorm(10, 0, 1))
split_data <- function(mydata, splits){
  nobs_split <- nrow(mydata)/splits
  index <- rep(1:splits, each = nobs_split)
  mylist <- list()
  for(i in 1:splits){
    mylist[[i]] <- mydata[index %in% i, ]
  }
  return(mylist)
}

> split_data(mydata = mydata, splits = 5)
[[1]]
       var1     var2
1 0.1713484 1.701517
2 0.2841739 1.950330

[[2]]
        var1       var2
3 -1.1439878 -0.3056291
4  0.5263579 -0.2284224

[[3]]
        var1      var2
5 0.09754836 0.3453402
6 0.30356020 0.8667112

[[4]]
        var1       var2
7 -0.4745733 -0.2550804
8 -0.3693031  1.1788687

[[5]]
        var1       var2
9  1.4285296  0.4237379
10 0.6124267 -0.7698283

我编写了一个函数,该函数接受一个数据集并将其分成较小的data.frames列表。我想知道除了使用for循环之外,还有没有更有效的编码方式。

1 个答案:

答案 0 :(得分:1)

可以使用split

使其更紧凑
n <- ceiling(nrow(mydata)/5)
unname(split(mydata, as.integer(gl(nrow(mydata), n, nrow(mydata)))))
#[[1]]
#        var1      var2
#1 -1.7588627 0.6217693
#2  0.5366508 1.0908685

#[[2]]
#           var1     var2
#3  1.2058708435 1.342967
#4 -0.0001398236 1.418649

#[[3]]
#       var1       var2
#5  1.117263 -0.0234539
#6 -0.874999  0.2461772

#[[4]]
#        var1       var2
#7 -0.7102152 0.01389716
#8 -0.2316287 1.53475900

#[[5]]
#         var1       var2
#9  0.15226958 -0.6097439
#10 0.05180574 -0.3296126