【问题标题】:How to extract substrings in r [duplicate]如何在r中提取子字符串[重复]
【发布时间】:2018-10-25 08:48:58
【问题描述】:

假设我有一个字符串:

{"id":"35","value":"0.2"},{"id":"1462","value":"0.2"},
{"id":"1109","value":"0.2"},{"id":"220","value":"0.2"},
{"id":"211","value":"0.1"}

我需要提取每个{}中的子字符串

比在标题中创建具有 id 和与 id 对应的数字的列,例如:

35  1462 1109 220 211
----------
0.2  0.2 0.2  0.2 0.1

【问题讨论】:

  • 简单,使用 JSON 解析器,然后遍历您的 JSON 内容以生成您想要的输出。这不是 sub 或任何其他 R 正则表达式函数的工作。
  • s <- '{"id":"35","value":"0.2"},{"id":"1462","value":"0.2"}, {"id":"1109","value":"0.2"},{"id":"220","value":"0.2"}, {"id":"211","value":"0.1"}'; L <- readLines(textConnection(gsub("\\},", "}\n", s))); L <- L[L != ""]; ndjson::flatten(L)

标签: r substring text-extraction


【解决方案1】:

我们可以在pasteing [, ] 之后分别在开头和结尾使用jsonlite

d1 <- jsonlite::fromJSON(paste0('[', str1, ']'))

这将是一个 2 列数据集,可以通过以下方式转换为 4 列

setNames(as.data.frame.list(d1$value), d1$id)
#   35 1462 1109 220 211
#1 0.2  0.2  0.2 0.2 0.1

假设我们有多个字符串,然后将这些字符串折叠成一个并应用fromJSON

str2 <- c(str1, str1)
d1 <- jsonlite::fromJSON(paste0("[", paste(str2, collapse=",\n"), "]"))

数据

str1 <- '{"id":"35","value":"0.2"},{"id":"1462","value":"0.2"},{"id":"1109","value":"0.2"},{"id":"220","value":"0.2"},{"id":"211","value":"0.1"}'

【讨论】:

  • 我还有一个问题,如果你不介意的话。如何将此应用于多个字符串?我正在考虑创建一个循环。还有其他方法吗?
  • @NikitaPronin 请查看更新后的帖子
猜你喜欢
  • 2017-12-30
  • 2020-11-17
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2017-02-17
相关资源
最近更新 更多