R语言对比不同数据框两列时如何删除全部重复条目
R中删除向量所有重复项(仅保留全局唯一值)
duplicated()默认只会标记重复项里从第二次出现开始的元素,所以你原来的写法只会删掉重复条目的后续副本,保留第一个出现的版本,没法把所有重复过的条目全清掉。用下面几种方法都能实现需求:
方法1:基础R双向判断法(无依赖,保留原始顺序,最推荐)
给duplicated()加fromLast = TRUE参数就能从向量末尾反向扫描重复项,两个方向的重复标记取交集,剩下的就是整个向量里只出现过一次的元素,还能保留元素在合并后的原始顺序:
compare <- append(test1$TL, test2$tl) # 正反向同时判断重复,筛掉所有出现超过1次的元素 compare_unique <- compare[!duplicated(compare) & !duplicated(compare, fromLast = TRUE)]
方法2:基础R频次统计法
直接统计每个元素的出现次数,只留出现次数刚好为1的条目就行,结果是去重后的唯一值集合:
compare <- append(test1$TL, test2$tl) freq_count <- table(compare) compare_unique <- names(freq_count[freq_count == 1])
方法3:tidyverse 写法
如果你平时用dplyr处理数据,用计数筛选的逻辑写起来更直观:
library(dplyr) compare <- append(test1$TL, test2$tl) compare_unique <- tibble(value = compare) %>% count(value) %>% filter(n == 1) %>% pull(value)
小提示
如果你的字符串列存在首尾多余空格、大小写不统一的情况(比如"Test"和"test"、" test "会被识别成不同值),合并前可以先做清洗:用trimws()去掉首尾空格,tolower()/toupper()统一大小写,避免漏判重复值。如果列里有缺失值NA,上述逻辑会把重复的NA全部删掉,需要保留单个NA的话单独加个判断就行。
内容的提问来源于stack exchange,提问作者melange164
相关产品推荐
相关产品推荐

