如何在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
相关产品推荐
相关产品推荐

