R在循环中有条件地绑定行

时间:2018-10-24 18:28:36

标签: r loops if-statement double rbind

我在数据框及其行上有一个double for循环。我正在对数据框的每一行进行一些计算(这些计算代表不同的电池,因此它们的值都不同)。最后,我想检查一行(例如电池)是否符合标准。如果可以,我想把它放到新的df中,以收集所有符合条件的电池。

df1 <- as.data.frame(matrix("values",nrow=24,ncol=19))
df2 <- as.data.frame(matrix("values",nrow=2976,ncol=22))
df3 <- df1[0,] #empty df of the same structure as df1

我在做什么:

for(i in 1:nrow(df1)){
  for(j in 1:nrow(df2)){

# some calculations giving me a result what the necessary capacity "nc" is
...

到目前为止,一切正常。然后我想做的是比较df1中每一行的结果(例如必要的电池容量)是否大于条件“ con”:

...
con <- df1[i,4]
nc <- max(df2[[20]])) # defining the necessary capacity
  if(con > nc){
   newdf <- bind_rows(df3,df1[i,])
  }
 } 
}

我希望newdf具有0到最多24行。根据实际数据,我应该获得11个条目。我得到的是1(即df1的最后一行)或超过30000个条目。因此,这无法正常工作。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您忘了增加df3,这就是为什么只有一行的原因,您总是将一行绑定到空的df3 data.frame。您的代码可以正常工作。您应该更改行

newdf <- bind_rows(df3,df1[i,])

进入

df3 <- bind_rows(df3,df1[i,])

但是这可能非常慢,因此我建议您使用向量化,例如@ Dave2i newdf<-df[df[,4] > nc, ]

的注释中所建议的