我在数据框及其行上有一个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个条目。因此,这无法正常工作。有任何想法吗?谢谢!
答案 0 :(得分:0)
我认为您忘了增加df3
,这就是为什么只有一行的原因,您总是将一行绑定到空的df3
data.frame
。您的代码可以正常工作。您应该更改行
newdf <- bind_rows(df3,df1[i,])
进入
df3 <- bind_rows(df3,df1[i,])
但是这可能非常慢,因此我建议您使用向量化,例如@ Dave2i newdf<-df[df[,4] > nc, ]