R语言:拆分数据单元格,提取字符串指定字符
解决方案:从JSON格式字符串中提取指定数字
核心思路
你的数据是嵌套在JSON结构的字符串里,直接用str_sub或separate会因为引号、冒号的格式干扰报错,推荐用正则匹配精准定位目标数字,结合tidyverse工具处理更高效。
具体代码实现
假设你的数据框为df,存储JSON字符串的列名为json_col,使用stringr包的str_extract函数提取:
library(tidyverse) # 提取目标数字 df <- df %>% mutate( # 提取键的前两位数字:匹配引号后的连续两位数字 prefix = str_extract(json_col, '(?<=")\\d{2}'), # 提取冒号后值的最后一位数字 suffix = str_extract(json_col, '(?<=:)\\d+') %>% str_sub(-1, -1) )
代码细节说明
(?<=")\\d{2}:通过正向断言跳过引号,直接匹配引号后的两位数字,规避引号干扰(?<=:)\\d+:匹配冒号后的所有数字,再用str_sub(-1,-1)截取最后一位,兼容值为多位数的情况- 多行JSON字符串无需额外处理换行符,正则会自动匹配跨行内容
测试结果示例
针对你提供的JSON片段:
{ "120710103043": 4, "160179505004": 10, "300930004002": 4 }
处理后生成的新列结果为:
| prefix | suffix |
|---|---|
| 12 | 4 |
| 16 | 0 |
| 30 | 4 |
内容的提问来源于stack exchange,提问作者MattAllen25
相关产品推荐
相关产品推荐

