You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中从数据框行内的字符串提取名称字段内容

提取类JSON文本中的名称字段

嘿,刚接触R语言文本分析不用发愁!你的每行文本其实是类JSON数组格式,只是用了单引号(JSON标准要求双引号),我们只需要做一点点转换,再借助专门的工具包就能轻松提取出名称啦。

步骤1:模拟你的数据框(方便对照)

先假设你的数据框是这样的(和你描述的格式完全一致):

df <- data.frame(
  sports = c(
    "[{'id': 16, 'name': 'Soccer'}, {'id': 35, 'name': 'Basketball'}, {'id': 10751, 'name': 'Boxing'}]",
    "[{'id': 20, 'name': 'Tennis'}, {'id': 40, 'name': 'Swimming'}]"
  ),
  stringsAsFactors = FALSE
)

步骤2:安装并加载必要的包

我们需要用jsonlite解析JSON格式文本,用dplyr简化数据框操作(基础R也能实现,后面会补充):

install.packages(c("jsonlite", "dplyr"))
library(jsonlite)
library(dplyr)

步骤3:提取名称字段

核心思路是:先把单引号替换成双引号(转成合法JSON),再解析JSON并提取name值:

df <- df %>%
  mutate(
    # 全局替换单引号为双引号,让文本符合JSON规范
    sports_json = gsub("'", "\"", sports),
    # 逐行解析JSON,提取name字段并合并为字符串(也可以保留列表格式)
    sport_names = sapply(sports_json, function(x) {
      parsed_data <- fromJSON(x)
      paste(parsed_data$name, collapse = ", ")  # 用逗号分隔多个名称,按需调整分隔符
    })
  )

如果你习惯用基础R实现,也可以这么写:

# 基础R版本
df$sport_names <- sapply(df$sports, function(x) {
  clean_json <- gsub("'", "\"", x)
  parsed_data <- fromJSON(clean_json)
  paste(parsed_data$name, collapse = ", ")
})

结果展示

运行后你的数据框会新增sport_names列,内容示例如下:

sportssport_names
[{'id': 16, 'name': 'Soccer'}, {'id': 35, 'name': 'Basketball'}, {'id': 10751, 'name': 'Boxing'}]Soccer, Basketball, Boxing
[{'id': 20, 'name': 'Tennis'}, {'id': 40, 'name': 'Swimming'}]Tennis, Swimming

特殊情况小提示

如果你的文本中存在名称里带单引号的特殊情况(比如name: 'O'Neil'),全局替换单引号会出错,这时候可以用更精准的正则替换,只替换键名和标点周围的单引号:

# 精准替换:只替换键名(比如'id'、'name')的单引号,以及对象首尾的单引号
sports_json <- gsub("(?<=\\[|, )'(.*?)':|'(?=\\])|'(?=, )", "\"", sports, perl = TRUE)

内容的提问来源于stack exchange,提问作者user36729

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:10:47