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

如何拆分混合字符串并转换为R语言data.frame?

将混合格式字符串转换为R的data.frame

给定一段包含普通键值对和JSON数组的混合字符串,直接用jsonlite::fromJSON()解析会报错,需要拆分两部分分别处理后合并成目标data.frame。示例字符串如下:

string <- "var1: 1, var2: 2, [{\"json_var1\": \"foo\", \"json_var2\": 1}]"

期望得到的目标data.frame:

var1 var2 json_var1 json_var2
1    1    2       foo         1

解决步骤与代码

  1. 拆分字符串:定位JSON部分的起始位置(以[为标志),将字符串拆分为普通键值段和JSON段。
  2. 解析普通键值段:把键值对转换为data.frame,并自动处理数据类型。
  3. 解析JSON段:用jsonlite::fromJSON()正常解析JSON数组。
  4. 合并结果:将两部分的data.frame按行合并。

完整实现代码:

library(jsonlite)

# 输入字符串
string <- "var1: 1, var2: 2, [{\"json_var1\": \"foo\", \"json_var2\": 1}]"

# 拆分字符串
json_start <- regexpr("\\[", string)[1]
non_json_part <- substr(string, 1, json_start - 2)
json_part <- substr(string, json_start, nchar(string))

# 处理非JSON键值对
non_json_list <- strsplit(non_json_part, ", ")[[1]]
non_json_df <- as.data.frame(
  matrix(
    unlist(strsplit(non_json_list, ": ")),
    ncol = length(non_json_list),
    byrow = TRUE
  ),
  stringsAsFactors = FALSE
)
colnames(non_json_df) <- non_json_df[1,]
non_json_df <- non_json_df[-1,]
# 自动转换数值类型
non_json_df[] <- lapply(non_json_df, function(x) {
  num_x <- as.numeric(x)
  if (!all(is.na(num_x))) num_x else x
})

# 解析JSON部分
json_df <- fromJSON(json_part)

# 合并得到最终data.frame
final_df <- cbind(non_json_df, json_df)

# 输出结果
print(final_df)

这段代码不依赖固定的键值对数量,只要字符串遵循“普通键值对 + 逗号空格 + JSON数组”的格式,就能适配不同数量的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:57:22