Есть ли альтернативный способ заменить вложенные циклы for и сделать код R более быстрым и эффективным? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть три фрейма данных, и я хочу найти комбинации некоторых строк из этих трех dfs, которые соответствуют критериям:

df_1[i, "start"] == df_2[j, "start"] &
  df_1[i, "end"] == df_3[k, "end"] &
  df_2[j, "end"] < df_3[k, "start"]

Я использовал nested for loop, чтобы выполнить эту работу, но получение результатов занимает очень много времени. Мне интересно, есть ли лучший способ выбрать строки из каждого из фреймов данных?

df_pos.D.DA.A.subDA<-df_pos.D.DA.A[df_pos.D.DA.A$anchor=="DA",]
df_pos.D.DA.A.subD<-df_pos.D.DA.A[df_pos.D.DA.A$anchor=="D",] 
df_pos.D.DA.A.subA<-df_pos.D.DA.A[df_pos.D.DA.A$anchor=="A",]

junction.pos.DA<-NULL
junction.pos.D<-NULL
junction.pos.A<-NULL
for (i in 1:nrow(df_pos.D.DA.A.subDA)){
  for (j in 1:nrow(df_pos.D.DA.A.subD)){
    for (k in 1:nrow(df_pos.D.DA.A.subA)){
      DAs<-df_pos.D.DA.A.subDA[i,"start"]
      DAe<-df_pos.D.DA.A.subDA[i,"end"]
      Ds<-df_pos.D.DA.A.subD[j,"start"]
      De<-df_pos.D.DA.A.subD[j,"end"]
      As<-df_pos.D.DA.A.subA[k,"start"]
      Ae<-df_pos.D.DA.A.subA[k,"end"]
      if((DAs==Ds)&(DAe==Ae)&(De<As)) {
      junction.pos.DA[i]<-df_pos.D.DA.A.subDA[i,"name"];
      junction.pos.D[j]<-df_pos.D.DA.A.subD[j,"name"];
      junction.pos.A[k]<-df_pos.D.DA.A.subA[k,"name"];
      print(c(i,j,k))
     }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...