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
循环之外,还有没有更有效的编码方式。
答案 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