如何从文本数据集中提取指定字段并存储至新DataFrame?
问题描述
现有R语言数据集dfx如下:
dfx=structure(list(V1 = c("(Description and Operation, 100-00 General Information) <a data-searchnum=G2107576 data-procuid=G1620638>Acceleration Control - Overview", "(Description and Operation, 310-02 Acceleration Control) <a data-searchnum=G2232632 data-procuid=G2210282>Acceleration Control - System Operation and Component Description", "(Description and Operation, 310-02 Acceleration Control) <a data-searchnum=G2232633 data-procuid=G2210283>Acceleration Control", "(Diagnosis and Testing, 310-02 Acceleration Control) <a data-searchnum=G2118147 data-procuid=G2118148>Accelerator Pedal ")), class = "data.frame", row.names = c(NA, -4L))
需要提取每个字符串中data-searchnum属性的值,并将这些值存储到新的DataFrame中,期望结果如下:
G2107576 G2232632 G2232633 G2118147
解决方案
可以用R语言的stringr包通过正则匹配实现提取,步骤如下:
- 若未安装
stringr包,先执行安装命令;之后加载包 - 使用
str_extract函数匹配data-searchnum=后的非空白字符,即为目标值
代码示例:
# 安装并加载stringr包 if (!require(stringr)) { install.packages("stringr") library(stringr) } # 提取data-searchnum字段值 extracted_nums <- str_extract(dfx$V1, "(?<=data-searchnum=)\\S+") # 生成新的DataFrame new_df <- data.frame(SearchNum = extracted_nums) # 查看结果 print(new_df)
执行后得到的new_df即为目标数据集,输出结果:
SearchNum 1 G2107576 2 G2232632 3 G2232633 4 G2118147
正则说明:(?<=data-searchnum=)是正向预查,定位到data-searchnum=之后的位置;\\S+匹配连续的非空白字符,刚好对应data-searchnum的属性值。
内容的提问来源于stack exchange,提问作者Andres Mora
相关产品推荐
相关产品推荐

