从字符串中解析数据

时间:2014-11-14 22:48:16

标签: r excel text-parsing string-parsing

我认为这是经验丰富的程序员一直在做的事情。但是,鉴于我有限的编程经验,请耐心等待。

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

  

[[{" from":" 4"," response":true," value":20},{&# 34;来自":" 8","回复":真实,"价值":20},{"来自":& #34; 9","回复":真实,"价值":20},{"来自":" 3", "回复":真实,"价值":20}],[{"来自":" 14","回复&# 34;:false," value":20},{"来自":" 15","响应":true,&#34 ;价值":20},{"来自":" 17","响应":false,"价值":20} ,{"来自":" 13","回复":真实,"价值":20}]]

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

最有效的方法是什么?通过"做到这一点"我的意思是学习技巧,然后实施它。我可以在我的实验室访问相当多的软件包(Excel,Stata,Matlab,R),所以这应该不是问题。

1 个答案:

答案 0 :(得分:3)

这看起来像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")))