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

在R中移除单突变簇后调整并重命名cluster_id列数值的方法

解决方法

可以用dplyr或者data.table包来实现需求,以下是两种常用方案:

方案一:使用dplyr包

# 先加载dplyr包(未安装请先运行 install.packages("dplyr"))
library(dplyr)

# 第一步:过滤掉每个样本下仅含1个突变的簇
filtered_data <- my_data %>%
  # 按样本ID和簇ID分组
  group_by(sample_id, cluster_id) %>%
  # 只保留组内突变数大于1的行
  filter(n() > 1) %>%
  # 取消分组
  ungroup()

# 第二步:对每个样本内的剩余簇重新编号
final_data <- filtered_data %>%
  # 按样本ID分组
  group_by(sample_id) %>%
  # 基于原簇ID的出现顺序生成连续编号(从0开始)
  mutate(cluster_id = match(cluster_id, unique(cluster_id)) - 1) %>%
  ungroup()

代码说明:

  • group_by(sample_id, cluster_id):将数据按样本和对应的簇分组,方便统计每个簇的突变数量
  • filter(n() > 1):n()返回当前组的行数(即突变数),只保留突变数大于1的簇
  • match(cluster_id, unique(cluster_id)):获取原簇ID在当前样本内的唯一出现顺序,减1是为了让编号从0开始,实现原簇3→2、原簇4→3这类递补效果

方案二:使用data.table包

如果处理的是大数据集,data.table的运行效率更高:

# 加载data.table包(未安装请先运行 install.packages("data.table"))
library(data.table)

# 将数据框转换为data.table格式
setDT(my_data)

# 第一步:过滤掉单突变簇
filtered_data <- my_data[, if (.N > 1) .SD, by = .(sample_id, cluster_id)]

# 第二步:重新编号簇ID
filtered_data[, cluster_id := match(cluster_id, unique(cluster_id)) - 1, by = sample_id]

代码说明:

  • .N是data.table内置变量,代表当前分组的行数
  • .SD表示当前分组的所有列数据,if (.N >1) .SD即保留突变数大于1的分组数据
  • 后续编号逻辑和dplyr方案一致,通过match和unique生成连续的簇ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:16:05