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

问题描述 投票:0回答:2

我有一个数据集,我想在一定条件下继续减少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循环,但最后只有最后一个数据集作为输出,而不是每个递增较小的数据集。

r for-loop apply lapply sapply
2个回答
1
投票

两件事情:

  1. 没有理由重复n:nrow(mtcars),只需将-(1:i)作为行索引。
  2. 要包括一个条件,你可以使用break()的ifelse。

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

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

1
投票

你在for循环的正确道路上。如果您只是按照创建结果框架的方式获得最后一个,那就错了。

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

更改为匹配编辑

© www.soinside.com 2019 - 2024. All rights reserved.