让for循环将所有结果添加到现有data.frame

时间:2015-05-05 08:15:29

标签: r for-loop dataframe rbind

我希望由for-loop生成的结果传递到一个data.frame。因此我创建了一个空数据框架,如下所示:

result <- data.frame(matrix(ncol = 8, nrow = 1))

然后将列的名称与将要搜索的data.frame的名称进行匹配:

names(result) <- names(example)

我的for循环应迭代值列表并检查输入data.frame以查找满足条件的值,然后将此值的整行添加到空data.frame

lpos
[1] 5

for(i in lpos){
indx <- sapply(example[,4], function(x) (x > minpos[i]) & (x < maxpos[i])) 
newrow <- example[indx,]
result = rbind(result, newrow)
}

所以我的预期输出是我得到data.frame,包含所有结果。但似乎这段代码每次都会覆盖添加的行,我只是在我的data.frame中保存了最后一次迭代。

如何防止此代码覆盖现有结果? 所以我的数据看起来像这样:

> head(example[1:4,-9])
      V1       V2   V3    V4    V5   V6 V7 V8
1 Spenn-ch00 AUGUSTUS mRNA  5691  9072 0.84  -  .
2 Spenn-ch00 AUGUSTUS mRNA 11246 12192 0.17  -  .
3 Spenn-ch00 AUGUSTUS mRNA 12799 15702 0.33  -  .
4 Spenn-ch00 AUGUSTUS mRNA 15752 18482 0.48  -  .

1 个答案:

答案 0 :(得分:1)

问题是我刚刚使用了lpos中包含的一个数字,而不是使用从1到lpos的范围

lpos
[1] 5

for(i in 1:lpos){
indx <- sapply(example[,4], function(x) (x > minpos[i]) & (x < maxpos[i])) 
newrow <- example[indx,]
result = rbind(result, newrow)
}

当代码现在这样时,它可以很好地工作。