2014-10-19 2 views
0

저는 R에 상당히 익숙합니다. 일부 검색을 수행했지만 여전히이 문제로 인해 문제가 있습니다. CSV 파일 필드에 포함 된 JSON을 데이터 프레임으로 변환

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 

내가 원하는 것은 내가 몇 가지 분석을 수행 할 수 있도록 데이터 프레임이를 변환하는 것입니다 밖으로 내 데이터 (CSV)의 예입니다. (예제 에서처럼 숫자 6,7,8을 데이터 프레임에 넣고 싶지 않습니다.) 나는이 RJSONIO` 또는`jsonlite``와 같은 패키지를 사용하여 수행 할 수있을 것 같아요

+0

빠른 것 stringi를 사용할 수 있습니다. – akrun

+0

R에서 세 가지로 가장 많이 사용되는 JSON 드라이버 (패키지)는 JSON 문자열을 R 객체로 변환 할 수 있습니다. JSON 문자열은 따옴표로 묶이지 않았기 때문에 적절한 CSV 파일이 아닙니다 (기본적으로 CSV 파일 라이브러리를 읽을 수는 없습니다). 가장 좋은 방법은'readLines'를 사용하여 모든 것을 적절한 JSON 문자열/형식으로 변환하거나 각 행을 개별적으로 구문 분석하고 모든 것을 데이터 프레임 행에 결합하는 것입니다. – hrbrmstr

답변

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]] 

를 사용하는 방법입니다 또는 당신은

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 
관련 문제