JSON文件中的"NA"转换为NA逻辑

Arm*_*min 6 json r dataframe jsonlite

我有json包含国家数据的文件.其中一个文件包含以下数据:

"[{\"count\":1,\"subject\":{\"name\":\"Namibia\",\"alpha2\":\"NA\"}}]"
Run Code Online (Sandbox Code Playgroud)

我将以下代码转换jsondata.frame使用jsonlite包:

df = as.data.frame(fromJSON(jsonfile), flatten=TRUE)) 
Run Code Online (Sandbox Code Playgroud)

我期待一个data.frame数字和字符串:

count subject.name subject.alpha2
1      Namibia             "NA"
Run Code Online (Sandbox Code Playgroud)

相反,NAalpha2代码会自动转换为NA逻辑,这就是我得到的:

str(df)
$ count         : int 1
$ subject.name  : chr "Namibia"
$ subject.alpha2: logi NA
Run Code Online (Sandbox Code Playgroud)

我希望alpha2是一个字符串,而不是逻辑.我该如何解决?

42-*_*42- 1

fromJSON 的特定实现(并且存在三个具有该函数名称的不同包)有一个 simpleVector 参数,该参数似乎可以阻止 corecion:

 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"
Run Code Online (Sandbox Code Playgroud)

我尝试看看这个选项是否能很好地适应这个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"
Run Code Online (Sandbox Code Playgroud)