如何将分支/株高/生根/重量等多组特征列分别堆叠后并排整合?
解决方案:多组特征列堆叠并整合展示
核心思路
利用tidyverse中的pivot_longer一次性提取所有特征组的盆号(pot_number)和特征类型,再通过pivot_wider将不同特征展开为并排列,无需多次merge或单独处理单组特征。
代码实现
首先构造匹配你数据结构的模拟数据集:
library(tidyverse) set.seed(123) df <- tibble( treatment = rep(c("A", "B"), each = 3), block = rep(c("1", "2", "3"), 2), `1branching` = rpois(6, 5), `2branching` = rpois(6, 6), `3branching` = rpois(6, 4), `1_rooting` = rnorm(6, 10, 2), `2_rooting` = rnorm(6, 12, 2), `3_rooting` = rnorm(6, 9, 2), `1height` = rnorm(6, 20, 3), `2height` = rnorm(6, 22, 3), `3height` = rnorm(6, 19, 3), `1weight` = rnorm(6, 5, 1), `2weight` = rnorm(6, 6, 1), `3weight` = rnorm(6, 4.5, 1) )
执行数据转换:
df_processed <- df %>% # 第一步:将所有特征列转为长格式,提取盆号和特征类型 pivot_longer( cols = -c(treatment, block), # 排除treatment、block等标识列 # 正则匹配列名:提取数字(盆号)和特征类型,兼容有无下划线的格式 names_pattern = "(\\d+)_?(branching|rooting|height|weight)", names_to = c("pot_number", "feature"), values_to = "value" ) %>% # 第二步:将特征类型转为列,实现并排展示 pivot_wider( names_from = feature, values_from = value ) %>% # 可选:将盆号转为整数类型 mutate(pot_number = as.integer(pot_number))
结果说明
处理后的数据集结构:
- 保留
treatment、block、pot_number标识列 branching、rooting、height、weight四组特征并排展示,每一行对应一个处理-区组-盆号的完整观测值
适配不同列名格式
如果你的列名是branching1、rooting_2这类特征在前、数字在后的格式,只需调整names_pattern和names_to的顺序:
df_processed <- df %>% pivot_longer( cols = -c(treatment, block), names_pattern = "(branching|rooting|height|weight)_?(\\d+)", names_to = c("feature", "pot_number"), values_to = "value" ) %>% pivot_wider(names_from = feature, values_from = value) %>% mutate(pot_number = as.integer(pot_number))
内容的提问来源于stack exchange,提问作者sofia_0084
相关产品推荐
相关产品推荐

