如何用R将数据框分段行转换为新列的分组标识
R语言实现分组标识添加方案
步骤1:构造/读取原始数据
先还原用户提供的原始数据结构(如果是从文件读取,可替换为read.table等函数,注意处理空值与行名):
# 模拟原始数据结构 raw_data <- data.frame( row_names = c("Section name", "activity_a", "activity_b", "activity_c", "activity_d", "activity_e", "activity_f", "activity_g", "activity_h", "activity_i", "Section name", "activity_j", "activity_k", "activity_l", "activity_m", "activity_n", "activity_o"), F1 = c(NA, NA, 1, NA, 1, NA, NA, 3, 3, NA, NA, 2, 1, 1, 3, 3, 2), F2 = c(NA, NA, 2, 3, 3, NA, 3, NA, NA, NA, NA, NA, NA, 3, NA, NA, NA), F3 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 2, NA), stringsAsFactors = FALSE ) # 设置行名并删除辅助列 rownames(raw_data) <- raw_data$row_names raw_data$row_names <- NULL
步骤2:生成分组标识
通过识别Section name分隔行,为对应行分配分组标签:
# 定位所有分隔行的位置 section_pos <- which(rownames(raw_data) == "Section name") # 定义每个分组的行范围 group_ranges <- lapply(seq_along(section_pos), function(i) { start <- section_pos[i] + 1 end <- ifelse(i < length(section_pos), section_pos[i+1] - 1, nrow(raw_data)) start:end }) # 为每行分配分组标识 raw_data$section <- NA for (idx in seq_along(group_ranges)) { raw_data$section[group_ranges[[idx]]] <- paste0("Section name_", idx) }
步骤3:清理并输出结果
移除原始分隔行,得到目标数据框:
# 删除分隔行 final_data <- raw_data[!rownames(raw_data) == "Section name", ] # 查看结果(空值显示为空白) print(final_data, na.print = "")
运行后即可得到符合要求的数据框,分组标识已正确添加到section列中。
内容的提问来源于stack exchange,提问作者Beto
相关产品推荐
相关产品推荐

