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

如何保留至少含3个字符串重复项的行?R语言数据处理求助

如何保留数据框中包含至少3个重复字符串的行?

你的核心需求是筛选出同一行中存在某个非空/非NA字符串重复出现至少3次的行,而你之前使用的rowSums(!is.na(df)) >= 3只是统计每行非NA单元格的数量——既没有排除空字符串,也没有检查字符串的重复性,自然无法得到预期结果。

数据结构

df <- structure(list(First = c("TAGAA1", "TAGAA2", "GYI1", "GYI2", 
"BBB", "TTT", "GGG10", "NNN", "GGG4A", "GGG4B"), FD1 = c("TAGAA1", 
"TAGAA2", "GYI1", "GYI2", "", "", "GGG10", "", "GGG4A", "GGG4B"
), FD2 = c("TAGAA1", "TAGAA2", "GYI1", "GYI2", "", "", "GGG10", 
"", "GGG4A", "GGG4B"), FD3 = c("TAGAA1", "TAGAA2", "GYI1", "GYI2", 
"", "", "GGG10", "", "", ""), FD4 = c(NA, NA, "GYI1", "GYI2", 
"", "", "GGG10", "", "", ""), FD5 = c("TAGAA1", NA, "GYI1", "GYI2", 
"", "", "GGG10", "", "", ""), FD5.1 = c("TAGAA1", NA, "GYI1", 
"GYI2", "", "", "GGG10", "", "", "")), class = "data.frame", row.names = c(NA, 
-10L))

解决方案

  1. 先将数据中的空字符串""转换为NA,统一处理无效值:
df[df == ""] <- NA
  1. 定义逻辑判断,筛选符合条件的行:
# 对每行进行判断:是否存在某个非NA字符串出现≥3次
keep_rows <- apply(df, 1, function(row) {
  non_na_vals <- na.omit(row)
  if (length(non_na_vals) == 0) return(FALSE)
  # 统计每个字符串的出现次数
  val_counts <- table(non_na_vals)
  # 判断是否有字符串满足出现次数≥3
  any(val_counts >= 3)
})

# 提取符合条件的行
filtered_df <- df[keep_rows, ]

结果说明

运行上述代码后,会保留以下行:

  • TAGAA1:对应字符串出现5次
  • TAGAA2:对应字符串出现3次
  • GYI1:对应字符串出现5次
  • GYI2:对应字符串出现5次
  • GGG10:对应字符串出现5次
  • GGG4A:对应字符串出现3次

而BBB、TTT、NNN、GGG4B这些行,因为没有任何字符串重复≥3次,会被过滤掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:08:10