如何在R语言数据框中对重复profile字符串分组并标记组别?
解决方案:给相同Profile分配组号
首先先把你的示例数据用R代码还原,方便测试:
library(tidyverse) # 还原示例数据 database <- tibble( sample = 1:6, profile = c("A", "A,B", "A,B", "A,C", "C", "A,C") )
要实现把相同profile归为同一组并标记组号,用dplyr的两种简单方法就能搞定:
方法1:利用因子转整数
直接把profile转换成因子,再转成整数,就能得到唯一的组号:
result <- database %>% # 把sample列改成"genome X"格式 mutate(sample = str_c("genome ", sample)) %>% # 给每个唯一的profile分配组号 mutate(`profile group/cluster` = as.integer(factor(profile))) # 查看结果 result
输出结果和你预期的完全一致:
# A tibble: 6 × 3 sample profile `profile group/cluster` <chr> <chr> <int> 1 genome 1 A 1 2 genome 2 A,B 2 3 genome 3 A,B 2 4 genome 4 A,C 3 5 genome 5 C 4 6 genome 6 A,C 3
方法2:使用group_indices()函数
dplyr的group_indices()可以直接给每个分组生成唯一ID,效果和上面一样:
result <- database %>% mutate(sample = str_c("genome ", sample)) %>% mutate(`profile group/cluster` = group_indices(., profile))
为什么你之前的代码没实现需求?
你用的get_dupes()只是筛选出有重复profile的行,add_count()是统计每个profile对应的样本数量,这两个函数都不会生成你需要的分组编号,而上面的方法直接针对分组生成了连续的整数标记。
内容的提问来源于stack exchange,提问作者Gab
相关产品推荐
相关产品推荐

