在R中如何将数据框内无规律长名称拆分到多个独立列
R实现无固定顺序字段拆分提取的最简方法
因为ColA中各字段没有固定排列顺序,所以不需要按下标拆分字符串,直接基于每个目标字段的固定特征用正则匹配提取即可,全程只需要tidyverse套件里的dplyr和stringr两个工具,几行代码就能完成。
操作步骤
- 加载依赖包
library(tidyverse)
- 构造示例测试数据(你自己的数据可跳过这一步)
df <- tibble( ColA = c("210812_150um_23deg_5sec", "210812_150um_23deg_30sec", "210812_150um_L1_7deg_120sec", "210812_2.5mg_150um_7deg_120sec"), ColB = c("3.8 kPa", "2.9 kPa", "5.3 kPa", "6.8 kPa") )
- 核心提取代码
result <- df %>% mutate( # 匹配6位纯数字的日期 Date = str_extract(ColA, "\\d{6}"), # 匹配带deg后缀的角度值,若存在小数角度可改成`[\\d.]+deg` Angle = str_extract(ColA, "\\d+deg"), # 匹配带sec后缀的时间值,若存在小数时间可改成`[\\d.]+sec` Time = str_extract(ColA, "\\d+sec"), # 直接复用原ColB作为Pressure列 Pressure = ColB ) %>% # 仅保留需要的目标列 select(Date, Angle, Time, Pressure)
提示:如果你的字段规则和示例不同,只需要调整
str_extract第二个参数的正则表达式匹配规则即可,不需要修改整体逻辑。
输出结果示例
运行后得到的result结构和你要求的完全一致:
# A tibble: 4 × 4 Date Angle Time Pressure <chr> <chr> <chr> <chr> 1 210812 23deg 5sec 3.8 kPa 2 210812 23deg 30sec 2.9 kPa 3 210812 7deg 120sec 5.3 kPa 4 210812 7deg 120sec 6.8 kPa
内容的提问来源于stack exchange,提问作者Munkhtur Otgonbayar
相关产品推荐
相关产品推荐

