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

如何识别数据框行中重复条目并生成逻辑列与重复值列?

解决R数据框的重复值判断与提取需求

嘿,这就帮你搞定这个R数据框的处理需求!先看一下你的原始数据:

col_1 <- c("A", "A", "B", "B", "C", "C")
col_2 <- c("A", "B", "C", "D", "E", "F")
col_3 <- c("A", "B", "C", "C", "B", "A")
df <- data.frame(col_1, col_2, col_3)

接下来分两步实现你要的两个新列:

1. 生成判断是否存在重复≥2次的t_f列

我们可以用apply()对每行进行元素频率统计,判断是否有元素出现次数≥2:

# 添加t_f列
df$t_f <- apply(df, 1, function(x) {
  # 统计每行元素出现次数,检查是否有≥2次的
  any(table(x) >= 2)
})

运行后t_f列的结果和你给出的示例完全一致:c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE)。

2. 生成提取重复值的name列

同样用apply()处理每行,提取出现次数≥2的元素,没有则返回NA:

# 添加name列
df$name <- apply(df, 1, function(x) {
  tbl <- table(x)
  # 筛选出出现次数≥2的元素名称
  repeat_val <- names(tbl)[tbl >= 2]
  # 如果没有重复值就返回NA,否则返回重复值
  if (length(repeat_val) == 0) NA else repeat_val
})

得到的name列就是你要的:c("A", "B", "C", NA, NA, NA)。

用tidyverse/dplyr实现(可选)

如果你习惯用dplyr的管道风格,也可以这样写:

library(dplyr)

df_processed <- df %>%
  rowwise() %>%
  mutate(
    t_f = any(table(c(col_1, col_2, col_3)) >= 2),
    name = {
      tbl <- table(c(col_1, col_2, col_3))
      repeat_val <- names(tbl)[tbl >= 2]
      if (length(repeat_val) == 0) NA else repeat_val
    }
  ) %>%
  ungroup()

这样处理后的df_processed同样包含你需要的两个新列。

内容的提问来源于stack exchange,提问作者John L. Godlee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:19