如何在R中统计TSV文件两数据框V_segment去括号后唯一值计数
解决方案
步骤说明
无需分开处理V_one和V_two,合并后统一处理更高效。核心是用正则精准去除括号及内部所有内容(包括括号内的逗号),再分组统计出现次数。
完整代码
# 加载所需工具包 library(tidyverse) # 合并两个数据框 combined_df <- bind_rows(V_one, V_two) # 清洗V_segment并统计次数 result <- combined_df %>% # 移除所有括号及括号内的内容 mutate(clean_V_segment = str_replace_all(V_segment, "\\(.*?\\)", "")) %>% # 按清洗后的字段分组,统计每组出现次数 group_by(clean_V_segment) %>% summarise(Count = n(), .groups = "drop") %>% # 重命名列名匹配示例输出 rename(V_segment = clean_V_segment) # 查看最终结果 print(result)
正则表达式说明
\\(.*?\\):
\\(:转义匹配左括号(括号在正则中是特殊字符,需转义).*?:非贪婪匹配任意字符,确保只匹配到最近的右括号,避免多括号场景下的过度匹配\\):转义匹配右括号
特殊场景兼容
针对V_table3中括号内带逗号的情况(比如IGHV3-10-F(242,9)),上述正则依然有效,会完整移除括号内的所有内容,得到干净的IGHV3-10-F。
简化版(直接从原始TSV处理)
如果不需要提前拆分V_one和V_two,直接从原始TSV文件处理更简洁:
df <- read_tsv('file.tsv') result <- df %>% mutate(clean_V_segment = str_replace_all(V_segment, "\\(.*?\\)", "")) %>% group_by(clean_V_segment) %>% summarise(Count = n(), .groups = "drop") %>% rename(V_segment = clean_V_segment)
内容的提问来源于stack exchange,提问作者Silvia
相关产品推荐
相关产品推荐

