基于3-4列使用dplyr移除重复行遇问题求助
问题分析与解决方法
你的去重代码逻辑完全搞反了,filter(duplicated(cbind(username, post, date)))是保留重复行,而非删除。duplicated()函数返回TRUE的行是“之前已经出现过相同组合的行”,用filter筛选这些行,相当于只留下重复的副本,反而把唯一的行删掉了。这就是为什么你手动检查还有重复,且重复运行代码还能继续删行——每次都在留更靠后的重复项。
正确的去重方法
方法1:用distinct(推荐,tidyverse风格更直观)
distinct可以直接指定去重的列,并用.keep_all = TRUE保留其他列的内容,默认保留每组重复中的第一行:
df <- df %>% distinct(username, post, date, .keep_all = TRUE)
方法2:修正duplicated的逻辑
如果坚持用duplicated,需要取反,保留第一次出现的非重复行:
df <- df %>% filter(!duplicated(cbind(username, post, date)))
额外注意:清理文本避免“假重复”
你的post列包含大量换行、缩进和空白字符,可能存在看起来相同但实际文本有差异的“假重复”。建议先清理文本再去重:
df <- df %>% # 去掉多余的空格、换行、制表符 mutate(post = str_squish(post)) %>% distinct(username, post, date, .keep_all = TRUE)
内容的提问来源于stack exchange,提问作者nesta1990
相关产品推荐
相关产品推荐

