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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:01:36