2014-10-19 27 views
0

我對R很新。我已經完成了一些搜索,但仍然遇到此問題。將CSV文件字段中嵌入的JSON轉換爲數據幀

這是我的數據(CSV)出來的10萬條記錄

{id_outlet_delivery:22015,name:Branch A}6 , 

{id_outlet_delivery:22016,name:Branch B}7 , 

{id_outlet_delivery:22017,name:Branch C}8 

我想要的是將其轉換爲數據幀,這樣我可以進行一些分析的實例。 (我不希望數字框中的數字爲6,7,8)。

+0

我想這可以用包,比如'RJSONIO'或'jsonlite'來完成。 – akrun 2014-10-19 04:24:50

+0

R中三個最流行的JSON驅動程序(包)中的任何一個都可以將JSON字符串轉換爲R對象。這不是一個合適的CSV文件,因爲JSON字符串沒有被引用(並且,我想不到一個默認會讀取的CSV文件庫)。最好的辦法是使用'readLines'並將整個事件轉換爲適當的JSON字符串/格式,或者分別解析每行,並將所有內容組合到數據幀行中。 – hrbrmstr 2014-10-19 04:29:30

回答

1

下面是使用regex

library(stringr) 
    v1 <- '{id_outlet_delivery:22015,name:Branch A}6 , 
    {id_outlet_delivery:22016,name:Branch B}7 , 
    {id_outlet_delivery:22017,name:Branch C}8' 

    nm1 <- str_extract_all(v1, perl("[[:alpha:]_]+(?=:)"))[[1]][1:2] 
    val <- str_extract_all(v1, perl("(?<=:)[[:alnum:] ]+(?=\\})?"))[[1]] 

的方法或者你可以使用stringi這將是更快

library(stringi) 
    nm1 <- stri_extract_all_regex(v1, "[[:alpha:]_]+(?=:)")[[1]][1:2] 
    val <- stri_extract_all_regex(v1, "(?<=:)[[:alnum:] ]+(?=\\}|,)")[[1]] 


    indx <- c(TRUE, FALSE) 
    dat <- setNames(data.frame(as.numeric(val[indx]), val[!indx], 
            stringsAsFactors=FALSE), nm1) 

    dat 
    # id_outlet_delivery  name 
    #1    22015 Branch A 
    #2    22016 Branch B 
    #3    22017 Branch C