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

在R语言中获取dataframe的MODULE列各分组对应行号向量的方法

R 按分组自动生成对应行号向量的实现方法

示例数据

你给出的示例数据结构如下:

df <- structure(list(landmark = c("Akanthion", "Asterion R PARIETAL R", 
"Asterion R  TEMPORAL R", "Asterion R OCCIPITAL", "Asterion L PARIETAL L", 
"Asterion L TEMPORAL L", "Asterion L OCCIPITAL", "Basioccipital anterior OCCIPITAL", 
"Basioccipital anterior SPHENOID", "Basion"), MODULE = c(1, 4, 
6, 7, 3, 5, 7, 7, 8, 7)), row.names = c("Akanthion", "Asterion R PARIETAL R", 
"Asterion R  TEMPORAL R", "Asterion R OCCIPITAL", "Asterion L PARIETAL L", 
"Asterion L TEMPORAL L", "Asterion L OCCIPITAL", "Basioccipital anterior OCCIPITAL", 
"Basioccipital anterior SPHENOID", "Basion"), class = "data.frame")

实现方法

1. 基础R方案(无需额外安装包)

第一步:分组提取所有行号

# 按MODULE列的值分组,存储每个组对应的行号
group_row_list <- split(seq(nrow(df)), df$MODULE)

运行后得到的group_row_list是一个列表,每个元素对应一个MODULE分组的行号向量,你可以直接用group_row_list[["7"]]获取MODULE=7的行号。

第二步:批量生成独立的Group_xxx向量

如果需要把每个分组的行号单独存成以Group_开头的独立向量,直接运行循环即可:

for (mod_val in names(group_row_list)) {
  assign(paste0("Group_", mod_val), group_row_list[[mod_val]])
}

运行完成后直接输入Group_7就能得到对应的行号向量c(4,7,8,10),和你预期的逻辑完全一致。

可选:输出为示例中的紧凑格式

如果你需要输出c(4,7:8,10)这种合并连续行号的字符串格式,可以使用下面的格式化函数:

format_compact_vec <- function(num_vec) {
  if (length(num_vec) == 0) return("c()")
  segments <- c()
  seg_start <- num_vec[1]
  seg_end <- num_vec[1]
  for (i in 2:length(num_vec)) {
    if (num_vec[i] == seg_end + 1) {
      seg_end <- num_vec[i]
    } else {
      segments <- c(segments, ifelse(seg_start == seg_end, as.character(seg_start), paste0(seg_start, ":", seg_end)))
      seg_start <- seg_end <- num_vec[i]
    }
  }
  segments <- c(segments, ifelse(seg_start == seg_end, as.character(seg_start), paste0(seg_start, ":", seg_end)))
  paste0("c(", paste(segments, collapse = ", "), ")")
}

# 批量打印所有分组的紧凑格式定义
for (mod_val in names(group_row_list)) {
  cat(paste0("Group_", mod_val, " <- ", format_compact_vec(group_row_list[[mod_val]]), "\n"))
}

用你的示例数据运行后输出结果完全符合你的预期:

Group_1 <- c(1)
Group_3 <- c(5)
Group_4 <- c(2)
Group_5 <- c(6)
Group_6 <- c(3)
Group_7 <- c(4, 7:8, 10)
Group_8 <- c(9)

性能说明

该方案时间复杂度为O(n),针对你1487行的数据集可以瞬间完成,不需要任何手动调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:48:03