2016-10-17 5 views
0

一致するJSON部分を 'data'列から新しい列 'geo'に抽出しようとしました。このコードは、最初の行を正しく抽出し、それ自体を繰り返します。私が読んで '地理' 列を期待:一致するJSONパーツで新しい列を作成

GEOストックホルム、GEO NEW YORK、GEO MADRID、GEO LONDON

の代わりに、現在

GEOストックホルム、GEOストックホルム、GEOストックホルム、GEOストックホルム

コード:あなたが見ることができるように、私はセミコロン以内に「地理」部分を維持し、「タイプ」の部分を失いたく

library(rjson) 
data <- c('["GEO STOCKHOLM","TYPE LOW"]','["GEO NEW YORK","TYPE MEDIUM"]','["GEO MADRID","TYPE HIGH"]','["GEO LONDON","TYPE MAX"]') 
df <- data.frame(data, stringsAsFactors=FALSE) 
df$geo <- grep("GEO", fromJSON(df$data), value = TRUE) 

。何これについて

Incorrect output df dataframe

+0

この回答は役に立ちましたか? http://stackoverflow.com/questions/40045080/r-read-and-parse-json/40046159#40046159 –

+0

'fromJSON(DFの$データ)'作り出すものを参照してください。 GEOM STOCKHOLMとTYPE LOWを反復するだけです。 –

+0

本当にレオナルド、ありがとう。問題は、grep関数が何らかの理由でdf $ data列を反復処理しないということでしょうか?それはちょうど最初の要素を正しく抽出し、それから繰り返すようです。 –

答えて

0

:DFのデータフレームを見ると、これは私の(間違った)出力のですか?

getJSON <- function(x) { 
result <- grep("GEO", rjson::fromJSON(x), value = TRUE) 
return(result) 

}その後、

そして:

df$geo <- sapply(df$data, getJSON) 

私はすべての '地理' 要素をキャッチこの方法

df$geo <- sapply(sapply(df$data, FUN = fromJSON, simplify = FALSE), FUN = "[", 1) 

          data   geo 
1 ["GEO STOCKHOLM","TYPE LOW"] GEO STOCKHOLM 
2 ["GEO NEW YORK","TYPE MEDIUM"] GEO NEW YORK 
3  ["GEO MADRID","TYPE HIGH"] GEO MADRID 
4  ["GEO LONDON","TYPE MAX"] GEO LONDON 
+0

おめでとう、しかしそれはすべてそれは2つの要素の最初を挿入します。順序は異なる可能性があるので、用語「GEO」が要素に存在するときはいつでもそれを認識し、それを抽出する必要があります。 –

0

みんなありがとう、私は私自身の機能を構築することになりました要素の数や順序にかかわらず。あなたの意見は私が最終的にそこに着くのを助けました。ありがとう。

関連する問題