You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用duplicated()的incomparables=NA处理数据框NA重复值报错问题

解决R中duplicated()处理数据框时incomparables=NA失效的问题

问题原因

duplicated()函数的incomparables参数仅对向量输入生效,针对数据框的duplicated.data.frame()方法并未实现该参数的支持,直接传入会触发报错,这是R的设计限制。

解决方案

要实现「包含NA的行不被判定为重复(返回FALSE)」的需求,可以手动拆分逻辑:先对无NA的行做重复检测,再将含NA的行的重复结果强制设为FALSE。

方法1:基础R实现

# 构造测试数据框
df <- data.frame(
  x = c(1, 2, 2, 3, NA, NA),
  y = c(2, 3, 3, 5, NA, NA)
)

# 标记所有无缺失值的行
no_na_rows <- complete.cases(df)
# 初始化重复结果向量
dup_result <- logical(nrow(df))
# 对无缺失值的行检测重复
dup_result[no_na_rows] <- duplicated(df[no_na_rows, ])
# 含NA的行直接设为FALSE
dup_result[!no_na_rows] <- FALSE

# 输出结果
dup_result
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE

方法2:tidyverse/dplyr实现

如果习惯使用tidyverse生态,可以结合anyNA()和duplicated()实现:

library(dplyr)

df %>%
  mutate(
    is_duplicated = case_when(
      anyNA(across(everything())) ~ FALSE,
      TRUE ~ duplicated(pick(everything()))
    )
  )

验证结果

两种方法都会得到符合预期的结果:含NA的行不会被判定为重复,仅无NA的重复行返回TRUE。

内容的提问来源于stack exchange,提问作者rickmatz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:31:04