R - Собрать для вывода цикла в новый столбец в кадре данных или отдельный вектор? - PullRequest
0 голосов
/ 11 октября 2018

Я написал функцию в R, которая берет уникальный идентификатор (например, Q8BZR4) для белка мыши из кадра данных, сопоставляет его с записью в кадре данных идентификаторов мыши рядом с их идентичным / похожим партнером-человеком, а затем возвращаетчеловеческий идентификатор.Я буду делать это для сотен идентификаторов, поэтому в идеале после того, как каждый человеческий идентификатор был возвращен, можно ли его ввести либо в новый столбец в исходном фрейме данных (данных), либо в новый вектор, чтобы позже я мог добавить его висходный фрейм данных, который был бы блестящим.

Подмножество исходных данных мыши и данных партнера mouse_human:

dput(droplevels(df_mouse))
structure(list(Protein.IDs = c("Q8CBM2;A2AL85;Q8BSY0", "A2AMH3;A2AMH5;A2AMH4;Q6X893;Q6X893-2;A2AMH8", 
"A2AMW0;P47757-2;A2AMV7;P47757;F6QJN8;F6YHZ8;F7CAZ6", "Q3U8S1;A2APM5;A2APM3;A2APM4;E9QKM8;Q80X37;A2APM1;A2APM2;P15379-2;P15379-3;P15379-6;P15379-11;P15379-5;P15379-10;P15379-9;P15379-4;P15379-8;P15379-7;P15379;P15379-12;P15379-13", 
"A2ASS6;E9Q8N1;E9Q8K5;A2ASS6-2;A2AT70;F7CR78", "A2AUR7;Q9D031;Q01730"
), Replicate = c(2L, 2L, 2L, 2L, 2L, 2L), Ratio.H.L.normalized.01 = c(NaN, 
NaN, NaN, NaN, NaN, NaN), Ratio.H.L.normalized.02 = c(NaN, NaN, 
NaN, NaN, NaN, NaN), Ratio.H.L.normalized.03 = c(NaN, NaN, NaN, 
NaN, NaN, NaN)), .Names = c("Protein.IDs", "Replicate", "Ratio.H.L.normalized.01", 
"Ratio.H.L.normalized.02", "Ratio.H.L.normalized.03"), row.names = 12:17, class = "data.frame")

dput(droplevels(df_mouse_human))
structure(list(Human = c("Q8WZ42", "Q8NF91", "Q9UPN3", "Q96RW7", 
"Q8WXG9", "P20929", "Q5T4S7", "O14686", "Q2LD37", "Q92736"), 
    Protein.IDs = c("A2ASS6", "Q6ZWR6", "Q9QXZ0", "D3YXG0", "Q8VHN7", 
    "E9Q1W3", "A2AN08", "Q6PDK2", "A2AAE1", "E9Q401")), .Names = c("Human", 
"Protein.IDs"), row.names = c(NA, 10L), class = "data.frame")

И код, с которым я работал:

  map.ids <- function(row_nums){
  for (ii in 1:length(row_nums)){
  # Picks out the Uniprot Identifer from the data
  row_num = row_nums[ii]
  row_ids <- ((data[row_num,1]))
  # Maps the row IDs to the Human-Mouse set and extracts the Human Identifier
  mouse.id <- which(H.sapiens.M.musculus$Mouse == row_ids)
  human.id <- H.sapiens.M.musculus[mouse.id,1]
  }
  }

1 Ответ

0 голосов
/ 11 октября 2018

Вы должны использовать merge или dplyr::join для этой задачи.

Предполагая, что первый кадр данных идентификаторов мыши, mouse_data, выглядит примерно так:

mouse_id  value
  O35099 832077
  P97865 839677
  Q9JK95 255605
  P15261 776238
  Q3UGY8 814013
  Q60769 789965

И второй кадр данных идентификаторов мыши и человека, mouse_human_data, выглядит следующим образом:

   mouse_id human_id
     Q8CAF4   Q5SYE7
     Q9WU63   Q9Y5Z4
     Q3UGY8   Q5TH69
     Q9JK95   Q96FX8
     Q60769   P21580
     Q6PFG8   Q7RTU3
     P15261   P15260
     Q80XF5   Q969J5
     Q6PHB0   Q9UHF4
     Q8BGF8   Q5M8T2
     P97865   O00628
     O35099   Q99683

Тогда либо:

merge(mouse_data, mouse_human_data)

, либо:

library(dplyr)
mouse_data %>% 
  left_join(mouse_human_data)

сгенерирует это:

  mouse_id  value human_id
1   O35099 832077   Q99683
2   P97865 839677   O00628
3   Q9JK95 255605   Q96FX8
4   P15261 776238   P15260
5   Q3UGY8 814013   Q5TH69
6   Q60769 789965   P21580
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...