作为一个新手,我正在努力解决大型数据集的以下问题。我想在“ 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
好的,我用您提供的部分数据做了一个假设的例子。
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