2015-05-05 35 views
6

Ülkelere ait verilerle birlikte json dosyam var.JSON dosyasındaki "NA", NA mantıksalına dönüştürür

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

Ben numaraları ve dizeleri ile data.frame bekliyordum: Aşağıdaki kodu jsonlite paketini kullanarak data.frame içine json dönüştürmek var

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

: dosyalardan biri aşağıdaki verilere sahip

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

Bunun yerine, NA alpha2 kodu otomatik olarak dönüştürülüyor NA mantıksal içine ve bu bana seni mi:

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

Ben alfa-2 bir dize, mantıklı değildir olmak istiyorum. Bunu nasıl düzeltirim?

+1

SO. iyi bir ilk soru. İnsanların oynayabileceği daha fazla örnek veri eklemeyi deneyin. – vagabond

+1

Sadece 'karakter' için zorla. Muhtemelen bunu yapmak gerekli değildir, çünkü R ilk baskıda bu zorlamayı yapar. –

+0

@BondedDust Teşekkürler. Evet, R ilk ihtiyaçta baskı yapıyor, ama Namibya için sadece veri içeren bazı dosyalar var. Json'u “dataframe” e dönüştürürken “karakter” e zorlamanın bir yolu var mı? – Armin

cevap

1

fromJSON özel uygulama (ve bir işlev için bu adı taşıyan üç farklı paketler vardır) corecion önlemek için görünen bir simplifyVector argüman var, diyeceksin:

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" 

O seçenek ile iyi çalıştı eğer görmeye çalıştı flatten argümanı, ancak hayal kırıklığına uğramıştı:

> 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

'simplifyVector = FALSE' hile yaptı. Teşekkürler. – Armin