我在表中有一个列"位置",其中包含有关以下位置的数据:
{ "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是我的整个表组成的数据框架。目前,我只对具有上述格式的信息的位置感兴趣。因此,我试图使用基本分配指令将位置字段加载到一个称为" LOC"的单独变量中:
loc <- t1$place
为了将其读取为JSON,需要通过最初不是单个引号来界定位置字段。我的桌子上有200万行,所以我真的无法手动添加定界符。
这看起来像一个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"