R语言:如何将指定前缀列合并为单列并展开成行
解决方案
你需要的是将宽格式数据转换为长格式,用tidyr包的pivot_longer()函数就能完美实现,替代unite()合并单元格的方式。
代码实现
首先确保安装并加载tidyverse包(包含tidyr):
# 首次使用时安装包 install.packages("tidyverse") # 加载包 library(tidyverse) # 你的原始数据框 Sex <- c("F", "F", "M", "M", "F") Phenotype <- c("Control", "Experimental", "Experimental", "Control", "Control") MOp_Amygdala <- c(10, 15, 2, 10, 8) MOp_Thalamus <- c(11, 16, 3, 11, 9) MOp_Cerebellum <- c(9, 14, 1, 9, 7) MOq_Cortex <- c(8, 11, 1, 8, 6) MOq_Striatum <- c(6, 9 , 8, 6, 8) df <- data.frame(Sex, Phenotype, MOp_Amygdala, MOp_Thalamus, MOp_Cerebellum, MOq_Cortex, MOq_Striatum) # 转换数据格式 df_transformed <- df %>% pivot_longer( cols = starts_with("MOp"), # 匹配所有以MOp开头的列 values_to = "Primary Motor Cortex" # 指定新列名称 )
转换后效果
转换后的df_transformed会生成15行(5个样本×3个MOp列),每个MOp列的数值单独成行,同时重复对应样本的Sex、Phenotype、MOq_Cortex和MOq_Striatum值,示例输出前几行如下:
# A tibble: 15 × 5 Sex Phenotype MOq_Cortex MOq_Striatum `Primary Motor Cortex` <chr> <chr> <dbl> <dbl> <dbl> 1 F Control 8 6 10 2 F Control 8 6 11 3 F Control 8 6 9 4 F Experimental 11 9 15 5 F Experimental 11 9 16 6 F Experimental 11 9 14
内容的提问来源于stack exchange,提问作者Adriana
相关产品推荐
相关产品推荐

