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

如何在R语言dataframe指定列识别重复值并忽略空白单元格

问题描述

我有一个小型dataframe,需要识别第二列Real_sample中的重复值,但该列存在空白单元格,而默认的duplicated()函数会将这些空白单元格纳入重复识别范围。以下是dataframe的结构:

structure(list(Deelnemernr. = c("4781061T0", "4781074T0", "4781076T0", 
"4781087T0", "4781047T0", "4781027T0", "4781024T0", "4781022T0", 
"4781017T0", "4781023T0", "4781078T0", "4781079T0", "4781063T0", 
"4781008T0", "4781026T0", "4781014T0", "4781015T0", "4781072T0", 
"4781046T0", "4781032T0", "4781077T0", "4781031T0", "4781030T0", 
"4781052T0", "4781056T0", "4781004T0", "4781043T0", "4781090T0", 
"4781036T0", "4781028T0", "4781053T0", "4781068T0", "4781048T0", 
"4781041T0", "4781050T0", "4781542T0", "4781095T0", "4781020T0", 
"4781097T0", "4781182T0"), Real_sample = c("4781061T0", "4781074T0", 
"4781076T0", "4781087T0", "4781047T0", "4781027T0", "4781024T0", 
"4781022T0", "4781017T0", "4781023T0", "4781078T0", "4781079T0", 
"4781063T0", "4781008T0", "4781026T0", "4781014T0", "", "4781072T0", 
"4781061T0", "4781032T0", "4781077T0", "4781031T0", "4781030T0", 
"", "4781056T0", "4781004T0", "4781043T0", "4781090T0", "4781036T0", 
"4781028T0", "4781053T0", "4781068T0", "4781048T0", "4781041T0", 
"4781050T0", "4781542T0", "4781095T0", "4781020T0", "4781097T0", 
"4781182T0")), row.names = c(NA, -40L), class = c("tbl_df", "tbl", 
"data.frame"))

如何仅识别该列中的重复值,同时忽略空白单元格?


解决方案

方法1:基础R实现

先筛选非空白行,再标记重复值,最后合并回原数据:

# 假设你的dataframe名为df
df$is_duplicate <- FALSE
# 仅对非空白的Real_sample值标记重复
non_empty <- df$Real_sample != ""
df$is_duplicate[non_empty] <- duplicated(df$Real_sample[non_empty]) | duplicated(df$Real_sample[non_empty], fromLast = TRUE)

生成的is_duplicate列会标记所有非空白的重复值,空白单元格保持FALSE。

方法2:dplyr(tidyverse)实现

如果习惯使用tidyverse语法,可按以下方式处理:

library(dplyr)

df <- df %>%
  mutate(
    is_duplicate = case_when(
      Real_sample == "" ~ FALSE,
      TRUE ~ duplicated(Real_sample) | duplicated(Real_sample, fromLast = TRUE)
    )
  )

这段代码会新增is_duplicate列,仅对非空白的Real_sample判断是否重复,空白项直接设为FALSE。

补充说明

  • duplicated(x)默认标记除第一次出现外的重复项,搭配duplicated(x, fromLast = TRUE)可标记所有重复出现的项(包括第一次出现的条目)。
  • 若只需标记重复项中的后续出现(保留第一次出现的条目),可去掉| duplicated(...)部分,仅使用duplicated(Real_sample)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:55:19