R中如何一次性将分隔符拆分到新行且仅保留唯一值?
R语言拆分分隔列并同步去重实现方案
问题根源
原有代码失效的核心原因是:strsplit()返回值为列表结构,直接调用unique()是对整个列表对象去重,而非对列表内每个元素对应的拆分后字符向量做去重,因此无法过滤重复值。
正确实现代码
仅需通过purrr::map()遍历列表元素执行去重,即可一步完成拆分+去重操作,无需后续单独处理:
# 加载依赖包 library(tidyverse) # 原有示例数据 df <- read.table(text= 'sample, GENE1 s1 A,B s4 B,A,A,C,C' , header = TRUE, stringsAsFactors = FALSE) # 一步实现拆分+去重 df %>% mutate(GENE1b = map(strsplit(as.character(GENE1), ","), unique)) %>% unnest(GENE1b)
运行结果
# A tibble: 5 × 3 sample. GENE1 GENE1b <chr> <chr> <chr> 1 s1 A,B A 2 s1 A,B B 3 s4 B,A,A,C,C B 4 s4 B,A,A,C,C A 5 s4 B,A,A,C,C C
逻辑说明
map()函数会逐个处理strsplit()返回的每个列表元素,对每个样本拆分后的字符向量单独执行unique()操作,展开后自然就不会出现重复值。
内容的提问来源于stack exchange,提问作者Ahdee
相关产品推荐
相关产品推荐

