通过数字向量子集化data.frame

时间:2016-03-17 14:33:12

标签: r

我有一个358行的数据框

df <- data.frame(A=rnorm(358),B=rnorm(358)) 

并希望在这些休息时间进行分组:

breaks <- c(59,119,178,238,298)

导致六个数据帧

59,60,59,60,60,60行。

(这是6 x 60采样设计的结果,其中两个样本已丢失。)

这可能吗?

1 个答案:

答案 0 :(得分:1)

如果您喜欢原始循环解决方案,您可以简单地遍历所需的行号,我知道您有兴趣按行号对此数据框进行子集化。

set.seed(1)
df <- data.frame(A=rnorm(358),B=rnorm(358)) 
## Added 1
breaks <- c(1, 59,119,178,238,298, 358)

listDFs <- vector("list", length(breaks) - 1)

for (i in 1:(length(breaks)-1)) {
  # Take observations from this to that row
  listDFs[[i]] <- df[breaks[i]:breaks[i+1],]
}

侧点

我认为@Frank在评论中提供的建议更好:

n = c(59, 60, 59, 60, 60, 60); split(df, rep(seq_along(n), n))

如果您正在寻找一种在生成的对象上做更多事情的视觉上方便的方法,那么循环是有意义的。

结果

> sapply(listDFs, dim)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   59   61   60   61   61   61
[2,]    2    2    2    2    2    2