如何在R语言中按分组堆叠规则整理指定数据框?
在R语言中按指定规则整理数据框
原始数据
dat <- read.table(text = " ID X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 1 14 14 13 19 13 10 13 10 12 16 10 12 11 15 18 19 2 13 16 10 17 13 18 13 13 13 12 13 15 17 12 17 20 3 10 14 15 14 13 10 17 15 19 12 11 15 11 17 20 16 ", header = TRUE)
需求说明
将数据按每4列(X1-X4、X5-X8、X9-X12、X13-X16)分组,每组保留ID列并将列名统一重命名为X1-X4,最后将所有组按顺序堆叠,得到目标格式。
解决方案
方法1:使用tidyverse工具集
通过拆分列组、重命名后合并,代码简洁直观:
library(dplyr) library(purrr) # 拆分X列为每4列一组 col_groups <- split(names(dat)[-1], ceiling(seq_along(names(dat)[-1])/4)) # 遍历每组,重命名列并合并成最终结果 result <- purrr::map_dfr(col_groups, function(cols) { dat %>% select(ID, all_of(cols)) %>% rename_with(~paste0("X", 1:4), starts_with("X")) }) print(result)
方法2:使用Base R
无需额外包依赖,手动处理列分组与合并:
# 提取X列名并按每4列分组 col_names <- names(dat)[-1] group_indices <- ceiling(seq_along(col_names)/4) col_groups <- split(col_names, group_indices) # 初始化结果框并逐步合并每组数据 result <- data.frame() for (cols in col_groups) { temp_df <- dat[, c("ID", cols)] colnames(temp_df)[-1] <- c("X1", "X2", "X3", "X4") result <- rbind(result, temp_df) } print(result)
输出结果
两种方法都会得到符合要求的数据框:
ID X1 X2 X3 X4 1 1 14 14 13 19 2 2 13 16 10 17 3 3 10 14 15 14 4 1 13 10 13 10 5 2 13 18 13 13 6 3 13 10 17 15 7 1 12 16 10 12 8 2 13 12 13 15 9 3 19 12 11 15 10 1 11 15 18 19 11 2 17 12 17 20 12 3 11 17 20 16
内容的提问来源于stack exchange,提问作者user330
相关产品推荐
相关产品推荐

