поиск значений в двух столбцах при наличии дубликатов в R (отредактировано) - PullRequest
0 голосов
/ 18 марта 2020

Как новичок ie Я пытаюсь решить следующую проблему с большим набором данных. Я хотел бы искать значение в столбце «CHROM», сравнивая два столбца CLONEID (второй столбец содержит дубликаты). Соответствующее значение «CHROM» будет присваиваться каждому «CLONEID», а то же значение будет присваиваться его дубликату. Я пишу эту таблицу в качестве примера:

CLONEID   | CHROM
976803    | 2A
976877    | 5B
976952    | 6B
976961    | 3B
976975    | 1A
977084    | 7B
977228    | 4A
977241    | 3A

Я хотел бы получить следующий вывод:

CLONEID   | CHROM
976803    |2A
976877    |5B
976952    |6B
976961    |3B
976975    |1A
977084    |7B
977084_1  |7B
977228    |4A
977228_1  |4A
977228_2  |4A
977228_3  |4A
977241    |3A

1 Ответ

0 голосов
/ 18 марта 2020

Хорошо, я сделал гипотетический пример с предоставленными вами частичными данными.

library(dplyr)

df <- tribble(
  ~CLONEID, ~CHROM,
  '976803', '2A',
  '976877', '5B',
  '976952', '6B',
  '976961', '3B',
  '976975', '1A',
  '977084', '7B',
  '977228', '4A',
  '977241', '3A',
  '977252', '7B',
  '977303', '4A',
  '977315', '4A',
  '977422', '4A'
)

Мы группируем по CHROM, чтобы мы могли идентифицировать дубликаты и нумеровать их с помощью исходного CLONEID и последовательного, начиная с 1 После переименования мы переупорядочиваем, чтобы новые CLONEID отображались вместе.

df <-
  df %>%
  group_by(CHROM) %>%
  mutate(CLONEID = ifelse(row_number() == 1, CLONEID, paste0(first(CLONEID), "_", row_number()-1))) %>%
  ungroup() %>%
  arrange(CLONEID)

print(df)

Вывод

   CLONEID  CHROM
   <chr>    <chr>
 1 976803   2A   
 2 976877   5B   
 3 976952   6B   
 4 976961   3B   
 5 976975   1A   
 6 977084   7B   
 7 977084_1 7B   
 8 977228   4A   
 9 977228_1 4A   
10 977228_2 4A   
11 977228_3 4A   
12 977241   3A 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...