如何保留至少含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))
解决方案
- 先将数据中的空字符串
""转换为NA,统一处理无效值:
df[df == ""] <- NA
- 定义逻辑判断,筛选符合条件的行:
# 对每行进行判断:是否存在某个非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
相关产品推荐
相关产品推荐

