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

如何在R dataframe中删除某列包含指定文本的重复观测行

R 数据框筛选实现方案

前置准备(示例数据构造,可跳过)

df <- data.frame(
  X1 = rep("rs6908903", 5),
  X10 = c("chr6", "chr6_GL000251v2_alt", "chr6_GL000252v2_alt", "chr6_GL000252v2_alt", "chr6_GL000252v2_alt")
)

方法1:基础R实现

无需加载额外包,直接用基础函数处理:

# 第一步:剔除X10含GL000的行,同时保留X10为chr6的行
df_filter <- df[!grepl("GL000", df$X10) & df$X10 == "chr6", ]
# 第二步:仅保留第一行
df_new <- df_filter[1, ]

如果需要按X1分组,每个SNP保留第一个符合条件的行,调整为:

df_new <- do.call(rbind, by(df, df$X1, function(sub_df) {
  sub_df[!grepl("GL000", sub_df$X10) & sub_df$X10 == "chr6", ][1, ]
}))

方法2:dplyr 实现(更简洁易读)

library(dplyr)
df_new <- df %>%
  # 剔除含GL000的行,仅保留X10为chr6的行
  filter(!grepl("GL000", X10), X10 == "chr6") %>%
  # 取第一行,旧版本dplyr可替换为slice(1)
  slice_head(n = 1)

如果需要按X1分组保留每个组的第一个符合条件的行,加group_by即可:

df_new <- df %>%
  group_by(X1) %>%
  filter(!grepl("GL000", X10), X10 == "chr6") %>%
  slice_head(n = 1) %>%
  ungroup()

输出结果验证

对示例数据处理后,最终输出为:

X1  X10
1 rs6908903 chr6

完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:45:03