使用for循环对data.frame进行子集化

时间:2016-11-03 17:51:38

标签: r for-loop

我有一个data.frame,我想每10行对它进行子集化,然后将一个函数应用于子集,保存对象,并删除前一个对象。这是我到目前为止所得到的

L3 <- LETTERS[1:20]
df <- data.frame(1:391, "col", sample(L3, 391, replace = TRUE))
names(df) <- c("a", "b", "c")

b <- seq(from=1, to=391, by=10)
nsamp <- 0
for(i in seq_along(b)){
a <- i+1
nsamp <- nsamp+1
df_10 <- df[b[nsamp]:b[a], ]
res <- lapply(seq_along(df_10$b), function(x){...}
saveRDS(res, file="res.rds")
rm(res)
}

我的问题是到达序列的最后一个元素for loop

b崩溃了

1 个答案:

答案 0 :(得分:1)

分区数据时,split是您的朋友。它将创建一个列表,每个数据子集作为一个项目,然后很容易迭代。

dfs = split(df, 1:nrow(df) %/% 10)

然后你的for循环可以简化为类似的东西(未经测试......我不确定你在做什么,因为示例数据似乎从df切换到sc2_10而我只希望名为b的列与名为b的向量不同:

for(i in seq_along(dfs)){
  res <- lapply(seq_along(dfs[[i]]$b), function(x){...}
  saveRDS(res, file = sprintf("res_%s.rds", i))
  rm(res)
}

我还修改了你的保存文件名,这样你就不会每次都覆盖同一个文件。