如何将Python查找重复值的代码复现到R?结果不一致如何排查
问题排查与解决方案
你遇到的结果差异主要来自以下几个可复现的原因,按排查优先级排序:
- 第一步优先检查:原始数据读取一致性
你需要先确认Python和R读入的初始数据集行数完全一致,review_profilename、beer_name两个字符串列的唯一值数量也完全一致。pandas的read_csv和R的read.csv/read_csv对特殊字符、空字符串、异常行的默认处理规则不同,比如R会自动填充缺失列而pandas默认跳过异常行,这是最可能导致去重后行数差333条的原因。 - 第二步:排序与去重逻辑的隐性差异
你写的R代码逻辑本身是对齐Python的,但两个语言的底层排序规则有区别:- pandas的
sort_values默认排序算法为快速排序,并列值的相对顺序和Rorder默认的排序算法输出不一致,不过这个差异只会影响同组合下多条相同最高评分时保留哪一行,不会影响总条数。 - 两个工具对缺失值的去重规则有细微区别:pandas默认把
NaN视为相等值参与去重,dplyr的distinct也遵循同样规则,但如果读入时空字符串被其中一个工具识别为缺失值、另一个识别为普通字符串,就会导致去重计数差异。
- pandas的
对齐Python逻辑的优化R代码
你可以改用分组取最大值的写法,规避排序规则差异的影响,逻辑也更贴合需求本身:
library(dplyr) df_clean <- df %>% # 按评分降序排序,对齐Python逻辑 arrange(desc(review_overall)) %>% # 按用户+啤酒分组 group_by(review_profilename, beer_name) %>% # 取分组内第一行,等价于Python的keep='first' slice_head(n = 1) %>% # 取消分组 ungroup()
如果要彻底排查差异,你可以分别统计两个语言中review_profilename和beer_name的唯一组合数,组合数不一致的话可以完全定位是数据读取阶段的问题。
内容的提问来源于stack exchange,提问作者tucomax
相关产品推荐
相关产品推荐

