从R中的字符串中提取特定关键字

时间:2015-05-15 21:19:36

标签: r pattern-matching text-extraction

我有一个专栏"地点"在我的表格中,其中包含有关以下内容的数据:

{ "id" : "94965b2c45386f87", "name" : "New York", "boundingBoxCoordinates" : [ [ { "longitude" : -79.76259, "latitude" : 40.477383 }, { "longitude" : -79.76259, "latitude" : 45.015851 }, { "longitude" : -71.777492, "latitude" : 45.015851 }, { "longitude" : -71.777492, "latitude" : 40.477383 } ] ], "countryCode" : "US", "fullName" : "New York, USA", "boundingBoxType" : "Polygon", "URL" : "https://api.twitter.com/1.1/geo/id/94965b2c45386f87.json", "accessLevel" : 0, "placeType" : "admin", "country" : "United States" }

由此,我想提取国家名称。我尝试了以下代码:

loc <- t1$place
loc = gsub('"', '', loc)
loc = gsub(',', '', loc)

清理字符串,现在看起来像这样:

"{ id : 00ed6f0947c230f4 name : Caloocan City boundingBoxCoordinates : [ [ { longitude : 120.9607709 latitude : 14.6344661 } { longitude : 120.9607709 latitude : 14.7873208 } { longitude : 121.1015117 latitude : 14.7873208 } { longitude : 121.1015117 latitude : 14.6344661 } ] ] countryCode : PH fullName : Caloocan City National Capital Region boundingBoxType : Polygon URL : https://api.twitter.com/1.1/geo/id/00ed6f0947c230f4.json accessLevel : 0 placeType : city country : Republika ng Pilipinas }"

现在要提取国家名称,我想使用word()函数:

word(loc, n, sep=fixed(" : "))

其中n在国名的位置我还算不上。但是当n = 1时,此函数给出正确的输出,但是对于n:

的任何其他vaue给出错误
Error in word[loc, "start"] : subscript out of bounds

为什么会这样? loc变量肯定有更多的单词与分离。或者有人可以建议从该字段中提取国家名称的更好方法吗?

编辑:t1是包含整个表格的数据框。目前我只对我的表格中的地方字段感兴趣,该字段具有上述格式的信息。因此,我试图将place字段加载到一个名为&#34; loc&#34;的单独变量中。使用基本分配指令:

loc <- t1$place

为了将其作为JSON读取,place字段需要用单引号分隔,而不是最初的。我的表中有2百万行,所以我真的无法手动添加分隔符。

1 个答案:

答案 0 :(得分:3)

这看起来像一个JSON对象,因此使用JSON解析来提取数据会更容易。

所以,如果这是你的字符串值

x <- '{ "id" : "94965b2c45386f87", "name" : "New York", "boundingBoxCoordinates" : [ [ { "longitude" : -79.76259, "latitude" : 40.477383 }, { "longitude" : -79.76259, "latitude" : 45.015851 }, { "longitude" : -71.777492, "latitude" : 45.015851 }, { "longitude" : -71.777492, "latitude" : 40.477383 } ] ], "countryCode" : "US", "fullName" : "New York, USA", "boundingBoxType" : "Polygon", "URL" : "https://api.twitter.com/1.1/geo/id/94965b2c45386f87.json", "accessLevel" : 0, "placeType" : "admin", "country" : "United States" }'

然后你可以做

library(jsonlite)
# or library(RJSOINIO)
# or library(rjson)

fromJSON(x)$country
# [1] "United States"