如何通过取第n行来从数据框中选择n个子集 子集1然后是子集2的第n + 1行,然后是子集3的第n + 3,直到nth = n
我用过
subset<-data[seq(nth,length,n),]
但是这给了一个子集然后我必须继续从1 ... n改变n来变得不同 subsets.e.g使用小数据(106行x 742列)设置为每10行获得10个子集
subset1<-data[seq(1,106,10),]
subset2<-data[seq(2,106,10),]
subset3<-data[seq(3,106,10),]
有没有办法更好地做到这一点?
通过常见问题我尝试使用
之类的循环sub<-function(data,nth,length,n){
sub<-data[seq(nth,length,n),]
for(n in 1:(sub)){
sub2<-sub[nth,]+1,sub3<-sub[nth,]+2,sub4<-sub[nth,]+3) }
su<-(sub,sub2, sub3,sub4)
return(su)
}
sub(data=gag11p,n=1,length=106,10)
这返回3个数据列表,只有数据框中的最后一个变量,我不知道哪里出错了,我怎么才能得到名字 我希望将PLS校准函数应用于创建的子集
,而不是数据帧请原谅并纠正任何错误,因为我现在正在学习编程和R。
答案 0 :(得分:3)
使用lapply
从@Chase借用函数构思的单行代码。
foo2 = function(data, nSubsets, nSkip){
lapply(1:nSubsets, function(n) data[seq(n, NROW(data), by = nSkip),])
}
foo2(mtcars, 5, 15)
答案 1 :(得分:2)
我建议您将所有这些不同的子集存储到单个list
对象中。我不确定我是否100%遵循上面的代码,但我认为这可以做到你想要的:
FOO <- function(data, nSubsets, nSkip){
outList <- vector("list", length = nSubsets)
totRow <- nrow(data)
for (i in seq_len(nSubsets)) {
rowsToGrab <- seq(i, totRow, nSkip)
outList[[i]] <- data[rowsToGrab ,]
}
return(outList)
}
发生了什么事?
以下是使用mtcars
数据的示例。请注意,数据集只有32行,因此该函数会自动处理超出范围的下标,并且不会抛出警告/错误:
FOO(mtcars,5,15)
[[1]]
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 #row 1
Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4 #row 16
Maserati Bora 15.0 8 301 335 3.54 3.570 14.60 0 1 5 8 #row 31
[[2]]
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 #row 2
Chrysler Imperial 14.7 8 440 230 3.23 5.345 17.42 0 0 3 4 #row 17
Volvo 142E 21.4 4 121 109 4.11 2.780 18.60 1 1 4 2 #row 32
[[3]]
mpg cyl disp hp drat wt qsec vs am gear carb
Datsun 710 22.8 4 108.0 93 3.85 2.32 18.61 1 1 4 1 #row 3
Fiat 128 32.4 4 78.7 66 4.08 2.20 19.47 1 1 4 1 #row 18
[[4]]
mpg cyl disp hp drat wt qsec vs am gear carb
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 #row 4
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 #row 19
[[5]]
mpg cyl disp hp drat wt qsec vs am gear carb
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #row 5
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 #row 20