R中使用!duplicated函数删除重复值时持续报错如何解决
问题排查与解决方法
错误原因
- 语法调用错误:
duplicated是R内置函数,调用需使用小括号(),你错误使用了适用于列表元素提取的双中括号[[,且代码缺少必要的闭合括号,属于基础语法错误。 - 下标位置错误:R中数据框的子集提取规则为
数据框[行筛选条件, 列筛选条件]。!duplicated(export)生成的是和数据框行数(33376行)长度一致的逻辑向量,用于筛选不重复的行,你错误将其放在了逗号后的列筛选位置,系统用长度为33376的向量匹配仅30列的列筛选下标,因此抛出长度不匹配的报错。
修正代码
方法1:基础R语法实现去重
全字段去重(整行完全重复才删除)
# 逻辑向量放在行筛选位置,逗号后留空保留所有列 export <- export[!duplicated(export), ]
按指定字段去重
如果不需要按整行判断重复,可指定判断重复的字段,示例如下:
# 按id列判断重复,仅保留id第一次出现的行 export <- export[!duplicated(export$id), ]
方法2:tidyverse语法实现去重
如果你使用tidyverse生态工具,也可以用distinct()函数实现相同效果,代码可读性更高:
# 全字段去重,保留所有列 export <- dplyr::distinct(export, .keep_all = TRUE) # 按指定列去重,保留所有列 export <- dplyr::distinct(export, id, .keep_all = TRUE)
内容的提问来源于stack exchange,提问作者Kaveh Ekbia
相关产品推荐
相关产品推荐

