8

json国のデータを含むファイルがあります。ファイルの 1 つに次のデータがあります。

"[{\"count\":1,\"subject\":{\"name\":\"Namibia\",\"alpha2\":\"NA\"}}]"

パッケージを使用して、次のコードを に変換しjsonます。data.framejsonlite

df = as.data.frame(fromJSON(jsonfile), flatten=TRUE)) 

data.frame私は数字と文字列を期待していました:

count subject.name subject.alpha2
1      Namibia             "NA"

代わりに、NAalpha2 コードは自動的に論理に変換されNA、これが得られます。

str(df)
$ count         : int 1
$ subject.name  : chr "Namibia"
$ subject.alpha2: logi NA

alpha2 を論理的ではなく文字列にしたい。これを修正するにはどうすればよいですか?

4

2 に答える 2

1

その fromJSON の特定の実装 (および関数にその名前を持つ 3 つの異なるパッケージがあります) には、コアシオンを防ぐように見える simpleVector 引数があります。

 require(jsonlite)

> as.data.frame( fromJSON(test, simplifyVector=FALSE ) )
  count subject.name subject.alpha2
1     1      Namibia             NA
> str( as.data.frame( fromJSON(test, simplifyVector=FALSE ) ) )
'data.frame':   1 obs. of  3 variables:
 $ count         : int 1
 $ subject.name  : Factor w/ 1 level "Namibia": 1
 $ subject.alpha2: Factor w/ 1 level "NA": 1
> str( as.data.frame( fromJSON(test, simplifyVector=FALSE ) ,stringsAsFactors=FALSE) )
'data.frame':   1 obs. of  3 variables:
 $ count         : int 1
 $ subject.name  : chr "Namibia"
 $ subject.alpha2: chr "NA"

flattenそのオプションが引数でうまく機能するかどうかを確認しようとしましたが、がっかりしました:

> str(  fromJSON(test, simplifyVector=FALSE, flatten=TRUE) )
List of 1
 $ :List of 2
  ..$ count  : int 1
  ..$ subject:List of 2
  .. ..$ name  : chr "Namibia"
  .. ..$ alpha2: chr "NA"
于 2015-05-05T17:00:03.197 に答える
0

受け入れられた答えは私のユースケースを解決しませんでした。ただし、rjson::fromJSONこれは自然に行われ、驚いたことに、私のデータでは 10 倍高速です。

于 2020-05-14T14:11:34.457 に答える