【问题标题】:Parsing data from a string从字符串中解析数据
【发布时间】:2014-11-14 22:48:16
【问题描述】:

我认为这是有经验的程序员一直在做的事情。但是,鉴于我有限的编程经验,请多多包涵。

我有一个 excel 文件,其中包含特定的单元格条目

[[{"from": "4", "response": true, "value": 20}, {"from": "8", "response": true, "value": 20}, { “来自”:“9”,“响应”:真,“值”:20},{“来自”:“3”,“响应”:真,“值”:20}],[{“来自”: “14”,“响应”:假,“值”:20},{“来自”:“15”,“响应”:真,“值”:20},{“来自”:“17”,“响应” ": false, "value": 20}, {"from": "13", "response": true, "value": 20}]]

现在,对于每个这样的条目,我想获取每个大括号中的信息并从中生成一行数据。每个这样的行将有 3 列。例如,由大括号内的第一个条目形成的行应分别具有条目“4”、“true”和“20”。我发布的部分应该给我 6 个这样的行,对于 n 个这样的重复,我应该得到一个 6n 行和 4 列的矩阵(一个标识符,加上提到的 3 列)。

最有效的方法是什么?通过“这样做”,我的意思是学习技巧,然后实施它。我可以在我的实验室中使用很多软件包(Excel、Stata、Matlab、R),所以这应该不是问题。

【问题讨论】:

  • 欢迎来到 SO!请在您的问题中包含您已经尝试过的事情的示例以及您为尝试解决问题所做的研究,这将有助于我们为您制定一个好的答案:)
  • 第四列的标识符从何而来?我在你的数据中没有看到。由于该文件已经在 Excel 中,而且单元格内容似乎格式正确,我将只使用正则表达式来解析数据;用户定义的对象和集合将其收集在一起,然后将输出放在新工作表上。

标签: r excel text-parsing string-parsing


【解决方案1】:

这看起来像一个JSON 样式文件。你得到的实际上是一个包含两个数据对象的列表。我们可以使用 jsonlite 包将它们转换为 R 数据帧。试试这个:

txt <- '[[{"from": "4", "response": true, "value": 20}, {"from": "8", "response": true, "value": 20}, {"from": "9", "response": true, "value": 20}, {"from": "3", "response": true, "value": 20}], [{"from": "14", "response": false, "value": 20}, {"from": "15", "response": true, "value": 20}, {"from": "17", "response": false, "value": 20}, {"from": "13", "response": true, "value": 20}]]'

library(jsonlite)
rbind.pages(fromJSON(txt))   ## just fromJSON(txt) for the list
#   from response value
# 1    4     TRUE    20
# 2    8     TRUE    20
# 3    9     TRUE    20
# 4    3     TRUE    20
# 5   14    FALSE    20
# 6   15     TRUE    20
# 7   17    FALSE    20
# 8   13     TRUE    20

如果这是在一个文件中,并且该文件被称为例如"new.txt",那你就可以用了

rbind.pages(fromJSON(readLines("new.txt")))

【讨论】:

  • 我在 CRAN 上找不到包 rjsonlite,不过他们确实有一个叫做 rjson 的东西。
  • 谢谢,我试过了。输入: install.packages("jsonlite") 输出: install.packages("jsonlite") 中的警告:缺少参数 'lib':使用 'C:\Users\Econ Grad\Documents/R/win-library/2.8 ' 警告:无法访问存储库的索引 stats.ox.ac.uk/pub/RWin/bin/windows/contrib/2.8 警告消息:包 'jsonlite' 不可用
  • pak 的想法是对的。当我在我的个人笔记本电脑上重新安装最新的 R 包时,我可以安装 jsonlite 并且代码运行良好。感谢您的回复,我会处理代码,如果我再次卡在某个地方,可能会再次询问您。
  • 函数 rbind.pages 将字符串作为输入。现在,如果我有一个字符串列表,您能告诉我如何将它扩展到列表,以便我的最终数据包含列表中所有字符串的解析输出吗?
  • rbind.pages 将列表作为输入。我不确定你在问什么。或许最好就此提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2016-08-13
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多