2015-05-15 102 views
2

我在我的表中的列「的地方」,其中包含有關,看起來像一個地方的數據的特定關鍵字:從字符串中提取R中

{ "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(loc, n, sep=fixed(" : ")) 

其中在國名的位置n我仍然沒有計算在內。但是,這個功能可以使正確的輸出,當n = 1,但給出了一個錯誤的n任何其他vaue:

Error in word[loc, "start"] : subscript out of bounds 

這是爲什麼發生? loc變量當然有更多的單詞與分離。或者有人可以提出一種更好的方法來從該領域提取國名?

編輯:t1是由我的整個表格組成的數據幀。目前我只對我的桌子上有上述格式信息的場地感興趣。所以我想這個地方場加載到所謂的「祿」使用基本任務指令的獨立變量:

loc <- t1$place 

爲了讀取它作爲一個JSON,這個地方字段需要用單引號分隔這它本來不是。我在表格中有2百萬行,所以我實在無法手動添加分隔符。

回答

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" 
+0

感謝您的及時答覆。請原諒我的無知,但字段在字符串的開始和結尾沒有單引號。因此,它顯示一個錯誤,當我嘗試類似: X < - 「T1 $地方」 或 位置< - fromJSON(「T1 $地方」) 我絕對不能手動,因爲我插入單引號有大約200萬條記錄要改變。你能爲此提出一些建議嗎? – kpks

+0

我會假設'fromJSON(t1 $ place)'會起作用。你沒有真正提供足夠的細節來製作數據[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)(請參閱該鏈接的提示)。 – MrFlick

+0

'code'loc < - fromJSON(t1 $ place) 給出一個錯誤:fromJSON(t1 $ place)中的錯誤:STRING_ELT()只能應用於'字符向量',而不是'整數' – kpks