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

如何删除数据框内同一行字符串变量取值相同的行?优先tidyverse方案

R语言删除同一行所有字符串列取值相同行的实现方案

需求说明

需要删除数据框中同一行内所有字符串类型变量取值完全相同的行,示例数据如下:

data <- data.frame(c("A", "C", "B"),
                   c("A", "B", "C"),
                   stringsAsFactors = FALSE)

head(data)
#   c..A....C....B.. c..A....B....C..
#1                A                A
#2                C                B
#3                B                C

预期输出过滤掉第一行(两列均为A)的结果:

#   c..A....C....B.. c..A....B....C..
#2                C                B
#3                B                C

tidyverse实现方案(优先推荐)

核心逻辑是按行遍历,统计每行所有字符串类型列的唯一值数量,仅保留唯一值数量大于1的行:

library(dplyr)

result <- data %>%
  # 开启按行处理模式
  rowwise() %>%
  # 统计当前行所有字符型变量的唯一值数量,保留数量大于1的行
  filter(n_distinct(c_across(where(is.character))) > 1) %>%
  # 取消行分组,避免后续操作受rowwise属性影响
  ungroup()

如果不需要自动识别所有字符串列,只想针对指定列做判断,可以修改c_across的参数:

# 仅针对列col1、col2做判断的写法示例
result <- data %>%
  rowwise() %>%
  filter(n_distinct(c_across(c(col1, col2))) > 1) %>%
  ungroup()

适配提示:如果字符串列存在NA值,可在n_distinct中添加na.rm = TRUE参数适配场景

基础R实现方案(补充)

如果不想依赖第三方包,可以用基础R实现相同逻辑:

# 识别所有字符串类型列
char_cols <- sapply(data, is.character)
# 过滤掉所有字符串列取值相同的行
result <- data[apply(data[, char_cols], 1, function(x) length(unique(x)) > 1), ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:30:01