R условно связать строки в цикле - PullRequest
0 голосов
/ 24 октября 2018

У меня есть двойной цикл for для фрейма данных и его строк.Я применяю некоторые расчеты для каждой строки кадра данных (которые представляют разные батареи и, следовательно, все различаются по своим значениям).В конце я хочу проверить, соответствует ли ряд (например, батарея) критериям.Если это так, я хочу поместить его в новый файл, собирающий все батареи, которые соответствуют критериям.

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 голосов
/ 24 октября 2018

Я думаю, что вы забыли увеличить df3, и поэтому у вас есть только одна строка, вы всегда привязываете одну строку к пустой df3 data.frame.Ваш код работает иначе.Вы должны изменить строку

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

на

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

Однако это может быть очень медленно, поэтому я предлагаю вам использовать векторизацию, например, как предложено в комментариях @ Dave2i newdf<-df[df[,4] > nc, ]

...