2017-07-20 11 views
2

辞書のリストを文字列として含む列のデータフレームがあります。辞書のリストからデータを抽出するR

小再現可能な例:私がやりたい何

ids <- c('[{"type":"A","value":"666"},{"type":"M","value":"029"},{"type":"A","value":"ABC"},{"type":"E","value":"5"},{"type":"E34","value":"456"}]', 
     '[{"type":"G","value":"334"},{"type":"A","value":"ZG5"},{"type":"E","value":"098"}]') 

dt <- as.data.frame(ids) 
dt 

がそれぞれ対応する行について"type":"A"の最初の値が含まれているdt$Aと呼ばれるDTに新しい列を作成することです。

各行に少なくとも1つの"type":"A"が常に存在します。

> dt$A 
[1] "666" "ZG5" 

は、これまでのところI'haveはrjsonライブラリを使用してみましたが、私は私がしたい値を抽出することができませんでしたし、私は考え出したていない:私は取得したいと思い、上記の例で

どのようにdtのすべての行にそれを適用する。ここで

おかげ

答えて

2

regexとオプションです。 gsubを使用して二重引用符を削除し、正規表現初心者としてstr_extract

library(stringr) 
dt$A <- str_extract(gsub('"', "", dt$ids), "(?<=A,value:)\\w+") 
dt$A 
#[1] "666" "ZG5" 
+2

と股関節A,value:を次の単語を抽出し、これはSO楽に誰かが1行のコードで問題を解決するたびに、私はどのように感じるかである... HTTPS ://xkcd.com/208/ –

+1

@AndrewBrēza私はまた、誰かがPerlで正規表現をやったときに何年も前と同じように感じました。その後、正規表現を使ってPerlで拾いました。 – akrun

+0

ありがとう! @AndrewBrēzaLOL –

関連する問題