2016-08-27 6 views
1

R로 읽은 JSON 파일 내의 객체에서 데이터 프레임을 만들고 싶습니다. 숫자 배열을 포함하는 객체가 하나 있습니다. dataframe 만들기R 데이터 프레임에서 JSON 객체 서식 지정

{ 
"data": [{ 
    "csv": [ 

     [2840807, 1458, 2841695, 1453, 2843810, 1448, 2848148, 1451, 2849744, 1433, 2851124, 1429, 2852570, 1427, 2855094, 1438, 2856712, 1423, 2858076, 1517, 2861072, 1462, 2862928, 1436, 2867020, 1431, 2869478, 1427, 2875622, 1447, 2877576, 1477, 2879148, 1479, 2882996, 1376, 2885182, 1377, 2886852, 1353, 2890056, 1439, 2894000, 1337, 2896792, 850, 2903790, 1304, 2906928, 1194, 2908392, 1199, 2918376, 1331, 2921652, 1294, 2926084, 1289, 2929324, 1287, 2930040, 1261, 2934936, 1297, 2936552, 1277, 2942992, 1322, 2946452, 1317, 2949464, 1307, 2952680, 1305, 2956264, 1301, 2959132, 1299, 2961710, 1315, 2962590, 1323, 2964382, 1517, 2968378, 1983, 2971068, 1981, 2971654, 1979, 2971848, 1978, 2971996, 1977, 2972812, 1976, 2973374, 1975, 2974244, 1973], 

     [2840807, 109824, 2841695, 126839, 2843810, 79656, 2845320, 109065, 2846148, 125106, 2848148, 154145, 2849744, 172562, 2851124, 188048, 2852570, 200180, 2855094, 75794, 2856712, 34674, 2858076, 45188, 2859206, 76179, 2861072, 69414, 2862928, 111601, 2865064, 133287, 2867020, 76194, 2869478, 120438, 2871360, 150805, 2875622, 176987, 2877576, 188887, 2879148, 71912, 2879976, 98267, 2882996, 150507, 2885182, 64488, 2886852, 80228, 2890056, 115601, 2892148, 67960, 2894000, 48487, 2896792, 48307, 2900768, 43033, 2901416, 31736, 2903790, 66720, 2906928, 55314, 2908392, 94788, 2911038, 31537, 2911532, 51875, 2911976, 67444, 2912556, 71559, 2918376, 102409, 2921652, 43392, 2924090, 82413, 2926084, 117744, 2927292, 68109, 2929324, 63155, 2930040, 78436, 2934936, 35685, 2936552, 38304, 2938900, 45302, 2942992, 36433, 2946452, 22651, 2949464, 48199, 2952680, 69146, 2956264, 77338, 2959132, 97334, 2961710, 32421, 2962590, 41347, 2964382, 76217, 2968378, 50101, 2971068, 107824, 2971466, 111102, 2971654, 110620, 2971848, 113277, 2971996, 44743, 2972812, 79831, 2972880, 79939, 2972958, 80009, 2973048, 80724, 2973126, 81660, 2973308, 86847, 2973374, 88831, 2973440, 90919, 2973508, 94734, 2974244, 25806, 2974314, 26648], null, null, null, null, null, null, null, [2840807, 5, 2846148, 6, 2858076, 5, 2867020, 4, 2871360, 6, 2875622, 8, 2879148, 9, 2890056, 10, 2894000, 11, 2900768, 12, 2903790, 10, 2908392, 11, 2911038, 10, 2921652, 11, 2924090, 12, 2927292, 11, 2934936, 12, 2942992, 11, 2949464, 10, 2961710, 9, 2962590, 8, 2964382, 6, 2971068, 7, 2971848, 8, 2973508, 9], null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null 
    ] 

}] 

}

은 하나 개의 변수에 따라 그들 모두를두고 :

2840807 
1458 

첫 번째 숫자가 두 번째 숫자에 대한 인코딩 된 일이기 때문에 나는이 개 변수로를하고 싶습니다 . 그래서 같은 테이블로 분할하고 싶습니다 :

2840807 1458 

내가 여기에이

statisticsObject <- lapply(response$data$csv, function(x) { 
x[sapply(x, is.null)] <- NA 
unlist(x) 
+1

에 오신 것을 환영합니다 SO 마이크에! 가능한 경우 파싱 할 JSON 텍스트의 작은 예와 파싱에 사용하는 코드를 작성합니다. 이렇게하면 문제의 정확한 아이디어를 얻는 것이 더 쉬울 것입니다. 또한 JSON 구문 분석 논리 중 일부가 솔루션에 도달하도록 수정 될 수도 있습니다. –

+0

감사합니다 키이스!. 나는 도움이되는 나의 포스트 희망을 편집했다. –

+0

훨씬 더 좋아 보인다! JSON 스 니펫은 유효하지 않습니다. http://jsonlint.com/을 전달하도록 수정할 수 있습니까? –

답변

0

에 대해 갈 수있는 가장 좋은 방법 확실하지 상당히 R에 새로운 해요 것은 내가해야한다고 생각 접근 방식입니다 귀하의 데이터에 대한 작업.

더 쉽게 읽을 수 있어야하지만 여전히 입력 데이터의 주요 기능을 캡처하는 JSON 스 니펫의 더 간단한 버전을 만들었습니다.

test.json

{ 
    "data": [{ 
     "csv": [ 
      [2840807, 1458, 2841695, 1453], 
      [2840807, 109824, 2841695, 126839], 
      null, null, null, null, null, null, null, 
      [2840807, 5, 2846148, 6], 
      null, null, null, null 
     ] 
    }] 
} 

R 코드

# load JSON and convert to a single vector 
library(jsonlite) 
json <- fromJSON('/tmp/test.json') 
dat <- unlist(json$data$csv) 

# get even and odd values separately and combine into a data frame 
indices <- seq(from=1, to=length(dat), by=2) 
df <- data.frame(
     col1=dat[indices], 
     col2=dat[indices + 1] 
    ) 

결과

> df 
    col1 col2 
1 2840807 1458 
2 2841695 1453 
3 2840807 109824 
4 2841695 126839 
5 2840807  5 
6 2846148  6