在R中存在重复项的情况下,在两列中查找值(已编辑)

问题描述 投票:-1回答:1

作为一个新手,我正在努力解决大型数据集的以下问题。我想在“ 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
r bigdata genetics
1个回答
0
投票

好的,我用您提供的部分数据做了一个假设的例子。

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 
© www.soinside.com 2019 - 2024. All rights reserved.