2017-06-02 111 views
0

我有一個填充了鍵值對的大型數據文件。關鍵是一個ID和值是一個巨大的json對象。我一直試圖通過將數據導入爲2列表格然後將該值轉換爲數據框架來將此數據文件轉換爲R中的df。在R中將JSON轉換爲DF

即使在驗證我的json之後,我仍然收到此錯誤。

Error: lexical error: invalid string in json text.

       [{ f: { SEQNUM: [ 455043, 455044, 
       (right here) ------^ 
下面

是我的代碼

part00013 <- read.table(PatientData, sep = '\t', header = F, as.is = T) 
colnames(part00013) <- c('k','v') 
make_indexDateLists <- function(x) { 
# x['v'] <- lapply(x['v'], function(y) as.character(y)) 
# x['v'] <- lapply(x['v'], function(y) substr(y,1, nchar(y)-1)) 
# x['v'] <- lapply(x['v'], function(y) substr(y,2,nchar(y)))    
    x["v"] <- lapply(as.character(x["v"]), function(y) jsonlite::fromJSON(y,simplifyVector = T)) 

    #do assignpatienttocohorts 

    x["v"] <- lapply(x["v"], function(y) RJSONIO::toJSON(y)) 

    cbind(x$k, x$v) 
} 

make_indexDateLists(part00013) 

,這裏是一個示例文件https://drive.google.com/open?id=0B6hKduYaYwdJQ3BwbUpNSW9EZk0

+0

忽略了JSON的各種軟件包,我試過了所有軟件包 – dk123456

+0

你真的很快判斷軟件包和你自己的能力。 – hrbrmstr

回答

1

這是無效的JSON,但你可以把它變成有效的JSON:

library(stringi) 
library(jsonlite) 
library(tidyverse) 

tmp <- readLines("oneline_part00013") 

parts <- stri_split_fixed(tmp, "\t", 2)[[1]] 

fromJSON(parts[2], flatten = FALSE) %>% 
    glimpse() 
## Observations: 1 
## Variables: 7 
## $ f <data.frame> 455043, 455044, 455045, 455046, 455047, 455048, 45504... 
## $ s <data.frame> 246549, 246550, 246551, 246552, 246553, 246554, 24655... 
## $ i <data.frame> 8224, 8788, 770102, 30, 10, 30, 3301, 3301, 3301, 192... 
## $ d <data.frame> 1114386, 1114387, 1114388, 1114389, 1114390, 1114391,... 
## $ o <data.frame> 162072527, 162072528, 162072529, 162072530, 162072531... 
## $ t <data.frame> 408352, 408353, 408354, 408355, 408356, 408357, 40835... 
## $ a <data.frame> 36527, 42259, 35562, 42458, 39119, 30, 10, 30, 20, 30... 

flatten = TRUE將取消所有data.frame列的嵌套(最終將超過450 c那麼我就試過了所有的軟件包