Как пройти через векторы, когда длины векторов меняются? - PullRequest
1 голос
/ 30 мая 2019

У меня изначально два вектора одинаковой длины.Эта первая полна сайтов модификации белка IE "E123".Второй - это уникальный код ссылки на литературу на этот сайт.Мне нужно пройти через эти векторы, чтобы удалить несколько ссылок на один и тот же сайт из одной и той же статьи.То есть, если VectorOne [1] == VectorOne [2] && VectorTwo [1] == VectorTwo [2], мне нужно удалить дубликат.Проблема в том, что когда я использую цикл for для циклического прохождения данных, я потенциально изменяю длину векторов, а это означает, что индексы, которые я использую, могут перестать быть правильными.

Как только я удалил одинДля элемента из векторов значение, которое я зацикливаю на длину (primarySite), слишком велико, и код падает.

Вот пример первых 10 значений из этих двух векторов:

primarySite[1:10]
 [1] ""     ""     "D248" "E241" "E242" "E241" "E242" "D244" "D244" "E241"
sitePMID[1:10]
 [1] 24641686 24055347 23955771 23955771 23955771 23955771 23955771 23955771 23955771 23955771

Desired Output:
primarySite[1:6]
 [1] ""     ""     "D248" "E241" "E242" "D244" 
sitePMID[1:6]
 [1] 24641686 24055347 23955771 23955771 23955771 23955771 


for(i in 1:length(primarySite)){
      for(j in (i+1):length(primarySite)){
        if(primarySite[i] == primarySite[j] && sitePMID[i] ==      
sitePMID[j]){
      primarySite <- primarySite[-j]
      sitePMID <- sitePMID[-j]

    } 
  }
}

1 Ответ

0 голосов
/ 30 мая 2019

Это легко, если мы поместим векторы во фрейм данных:

data = data.frame(primarySite, sitePMID)
deduplicated_data = unique(data)

Вы можете найти множество других способов в R-FAQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...