R语言dataframe特殊重塑:3x3转6x2及任意列通用实现方法
使用tidyverse实现通用相邻列堆叠逻辑
核心实现代码
library(tidyverse) # 替换example为任意列数的输入数据框即可运行 result <- seq(ncol(example) - 1) %>% map_dfr( ~ select(example, all_of(c(.x, .x + 1))) %>% rename_with(~ c("one", "two")) )
逻辑说明
- 该实现完全适配任意列数的输入数据框,核心逻辑是遍历所有相邻列对,将每组相邻两列单独提取后按行堆叠
seq(ncol(example) - 1)会自动根据输入的列数生成所有相邻列对的起始索引,比如3列生成1、2,对应取「第1列+第2列」「第2列+第3列」两组子表map_dfr会自动将所有子表按行合并,同时统一将输出的两列重命名为one和two,和预期输出格式完全匹配
效果验证
拿示例数据运行上述代码,输出结果和需求完全一致:
# 示例输入 example <- data.frame( one = c("a","b","c"), two = c("a","b","b"), three = c ("c","a","b") ) # 运行通用代码后输出 > result one two 1 a a 2 b b 3 c b 4 a c 5 b a 6 b b
内容的提问来源于stack exchange,提问作者M1996rg
相关产品推荐
相关产品推荐

