““ NA”在JSON文件中转换为NA逻辑

问题描述 投票:7回答:2

我有json个文件,其中包含国家/地区的数据。其中一个文件具有以下数据:

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

我有以下代码,使用json程序包将data.frame转换为jsonlite

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

我期望带有数字和字符串的data.frame

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

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

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

我希望alpha2为字符串,而不是逻辑。我该如何解决?

json r dataframe jsonlite
2个回答
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"

我尝试查看该选项是否与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"

0
投票

接受的答案无法解决我的用例。但是,rjson::fromJSON自然执行此操作,令我惊讶的是,我的数据快10倍。

© www.soinside.com 2019 - 2024. All rights reserved.