在R中将数据集大小迭代减少一

时间:2019-03-14 17:47:23

标签: r for-loop apply lapply sapply

我有一个数据集,我希望在特定条件下一直减少1。我希望所有数据集分别保存并合并到列表中。例如,我可以手动进行:

a<-mtcars[1:nrow(mtcars),]
b<-mtcars[2:nrow(mtcars),]
c<-mtcars[3:nrow(mtcars),]
d<-mtcars[4:nrow(mtcars),]
e<-mtcars[5:nrow(mtcars),]
f<-mtcars[6:nrow(mtcars),]
g<-mtcars[7:nrow(mtcars),]
h<-mtcars[8:nrow(mtcars),]
i<-mtcars[9:nrow(mtcars),]
j<-mtcars[10:nrow(mtcars),]

as.list(a,b,c,d,e,f,g,h,i,j)

让我们假设在第10行,满足某些条件,例如某个日期。我该怎么做呢?我已经尝试过for循环,但是最终仅以最后一个数据集作为输出,而不是每个递增的较小数据集。

2 个答案:

答案 0 :(得分:1)

使用for循环,您处在正确的路径上。如果只用创建结果框架的方式找回最后一个,那是错误的。

dataList = list()
for (i in seq(1, 10)){
    dataList[[i]] = mtcars[i:nrow(mtcars),]
}

已更改以匹配编辑

答案 1 :(得分:1)

两件事:

  1. 没有理由重复n:nrow(mtcars),只需传递-(1:i)作为行索引。

  2. 要包含条件,可以将ifelse与break()一起使用。

例如,这是for循环,条件是它将重复此循环7次:

  mc<-list()
  for(i in 1:nrow(mtcars)) ifelse(i==7,break(),mc[[i]]<-mtcars[-(1:i),])