R语言如何将文本列提取的列表拆分为多个独立数值列
R文本列拆分多列解决方案
问题原因
你的猜测正确:str_extract_all() 返回的是列表类型的列,而 separate() 仅支持对字符串类型的列按分隔符拆分,无法直接处理列表类数据。同时你当前使用的正则存在遗漏,无法匹配最后一个BC字段的值(该字段后缀为))而非逗号)。
解决方案
方案1:适配现有逻辑调整
在提取匹配结果后,先将每个列表元素拼接为指定分隔符分隔的字符串,再调用separate拆分:
library(stringr) library(tidyr) library(dplyr) df %>% mutate(text = str_extract_all(text,"(?<==)\\d|NA(?=,|\\))") %>% sapply(paste, collapse = ", ")) %>% separate(col = text, into = c("DH", "SZ", "RM", "FO", "GP", "BC"), sep = ", ", convert = TRUE)
方案2:更简洁的一步实现
直接使用tidyr::extract()通过正则分组匹配,一次性提取所有字段值,无需处理列表格式:
library(tidyr) library(dplyr) df %>% extract( col = text, into = c("DH", "SZ", "RM", "FO", "GP", "BC"), regex = "DH=(\\d|NA), SZ=(\\d|NA), RM=(\\d|NA), FO=(\\d|NA), GP=(\\d|NA), BC=(\\d|NA)", convert = TRUE )
两种方案执行后都会得到预期结果,convert = TRUE参数会自动将提取的值转为数值类型,NA会被识别为缺失值。
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

