如何使用pivot_longer关联多列实现数据框宽表转长表?
解决方法
你需要同时处理成对的列(如A与TCLP_A、B与TCLP_B),可以通过pivot_longer的正则匹配功能关联对应的Chemical和两类浓度值,代码如下:
library(tidyr) # 假设你的数据框是df df %>% pivot_longer( cols = everything(), # 选中所有列 names_to = c(".value", "Chemical"), # 第一捕获组对应值列名,第二组对应Chemical names_pattern = "(TCLP_)?(.*)" # 正则匹配:可选的TCLP_前缀 + Chemical名称 ) %>% rename(Concentration = `NA`) # 将无前缀的列重命名为Concentration
代码解释:
names_pattern = "(TCLP_)?(.*)":用正则表达式拆分列名,捕获两个部分:- 第一部分
(TCLP_)?:匹配可选的"TCLP_"前缀(对应TCLP浓度列) - 第二部分
(.*):匹配Chemical名称(A或B)
- 第一部分
names_to = c(".value", "Chemical"):指定第一捕获组作为值的列名(.value表示将这部分作为新的列名),第二捕获组作为Chemical列的内容- **
rename(Concentration = \NA`)**:没有"TCLP_"前缀的列会被分配到NA列,将其重命名为需要的Concentration`
运行后得到的结果如下:
| Chemical | Concentration | TCLP |
|---|---|---|
| A | 1 | 0.1 |
| B | 10 | 10.1 |
| A | 2 | 0.2 |
| B | 20 | 20.1 |
(若需要按Chemical排序,可追加arrange(Chemical)步骤)
内容的提问来源于stack exchange,提问作者tim
相关产品推荐
相关产品推荐

