如何在R中从列名提取值并生成新列重构数据集?
在R中从列名提取值转换数据格式
核心思路
先将宽格式数据转成长期表,再拆分原列名生成所需的新属性列,用tidyverse工具包就能快速实现。
步骤示例
- 加载工具包
library(tidyverse)
- 替换为你的原始数据(这里模拟示例结构)
original_data <- tibble( 基因ID = c("基因1", "基因2", "基因3"), `表达量_对照组_重复1` = c(1.2, 3.4, 5.6), `表达量_对照组_重复2` = c(1.3, 3.5, 5.7), `表达量_处理组_重复1` = c(2.1, 4.2, 6.3), `表达量_处理组_重复2` = c(2.2, 4.3, 6.4) )
- 转换为目标格式
target_data <- original_data %>% # 宽表转长表:保留标识列(如基因ID),其余列转为「原列名+对应数值」的行 pivot_longer( cols = -基因ID, names_to = "原列名", values_to = "数值" ) %>% # 拆分原列名生成新列:按列名里的分隔符(这里是下划线)拆分 separate( col = 原列名, into = c("检测指标", "分组", "重复"), sep = "_" )
适配不同列名结构
- 如果列名用点号分隔(比如
表达量.对照组.重复1),把sep = "_"改成sep = "\\." - 如果列名无明显分隔符(比如
表达量对照组重复1),改用extract配合正则表达式提取:
target_data <- original_data %>% pivot_longer(cols = -基因ID, names_to = "原列名", values_to = "数值") %>% extract( col = 原列名, into = c("检测指标", "分组", "重复"), regex = "(表达量)(对照组|处理组)(重复\\d)" )
内容的提问来源于stack exchange,提问作者Shoumit Saha
相关产品推荐
相关产品推荐

