R语言如何将Excel重复列块转为第一组列对应的新增行
解决思路
你的数据结构是每4列构成一个独立的重复数据块,总共有3个这样的块(1-4列、5-8列、9-12列),只需要把每个块单独提取出来,再按行拼接就能得到你要的结果。
方法1:tidyverse 实现(代码更易读,可适配任意块数)
library(tidyverse) df_result <- d1 %>% # 按每4列一组自动拆分所有列块 split.default(rep(1:(ncol(.)/4), each = 4)) %>% # 统一所有子表列名,方便拼接 map(~ set_names(.x, paste0("...", 1:4))) %>% # 按行合并所有块 bind_rows()
方法2:base R 实现
# 提取各个列块 block1 <- d1[, 1:4] block2 <- d1[, 5:8] block3 <- d1[, 9:12] # 统一列名 colnames(block2) <- colnames(block1) colnames(block3) <- colnames(block1) # 按行拼接得到结果 df_result <- rbind(block1, block2, block3)
你可以运行identical(df_result, df2)验证,返回结果为TRUE,和你需要的输出完全一致。
如果你的实际数据列数更多,只需要调整分块逻辑即可:比如总列数为N、每k列一个块时,将拆分参数改成对应数值即可适配,不需要修改核心拼接逻辑。
内容的提问来源于stack exchange,提问作者Mark Davies
相关产品推荐
相关产品推荐

