0

ここでR初心者私は次のようなデータを持っています:

{'id': 19847005, 'profile_sidebar_fill_color': u'http://pbs.foo.com/profile_background', 'profile_text_color': u'333333', 'followers_count': 1105, 'location': u'San Diego, CA', 'profile_background_color': u'9AE4E8', 'listed_count': 43, '009', 'time_zone': u'Pacific Time (US & Canada)', 'protected': False}

このテキストから位置データを抽出したい: San Diego, CA.

これを達成するためにこのストリンガー パッケージを使用しようとしましたが、市と州を取得するための正規表現を正しく取得できません。状態が存在する場合もあれば、存在しない場合もあります。

location_pattern <- "'location':\su'(\w+)'"
rawdata$location <- str_extract(rawdata$user, location_pattern)
4

3 に答える 3

2

json の文字列のように見えますが、それについてあまり気にしないのであれば、おそらくこれが役立つでしょう。

library(stringi)

ss <- stri_split_regex(x, "[{}]|u?'|(, '(009')?)|: ", omit=TRUE)[[1]]
(m <- matrix(ss, ncol = 2, byrow = TRUE))
#      [,1]                         [,2]                                   
# [1,] "id"                         "19847005"                             
# [2,] "profile_sidebar_fill_color" "http://pbs.foo.com/profile_background"
# [3,] "profile_text_color"         "333333"                               
# [4,] "followers_count"            "1105"                                 
# [5,] "location"                   "San Diego, CA"                        
# [6,] "profile_background_color"   "9AE4E8"                               
# [7,] "listed_count"               "43"                                   
# [8,] "time_zone"                  "Pacific Time (US & Canada)"           
# [9,] "protected"                  "False"                            

これで、左側の列に ID 名が表示され、右側に値が表示されます。必要に応じて、この時点から json を再構築するのはおそらく簡単でしょう。

また、json-ness に関しては、a に強制mするdata.frame(またはマトリックスのままにする) ことができます。jsonlite::toJSON

library(jsonlite)
json <- toJSON(setNames(as.data.frame(m), c("ID", "Value")))
fromJSON(json)
#                           ID                                 Value
# 1                         id                              19847005
# 2 profile_sidebar_fill_color http://pbs.foo.com/profile_background
# 3         profile_text_color                                333333
# 4            followers_count                                  1105
# 5                   location                         San Diego, CA
# 6   profile_background_color                                9AE4E8
# 7               listed_count                                    43
# 8                  time_zone            Pacific Time (US & Canada)
# 9                  protected                                 False
于 2014-12-30T22:20:08.260 に答える
2

あなたは試すことができます

str_extract_all(str1, perl("(?<=location.: u.)[^']+(?=')"))[[1]]
#[1] "San Diego, CA"
于 2014-12-30T20:11:27.337 に答える