2016-03-14 2 views
0

У меня есть файл json с 400 элементами в нем. И я хочу повернуть его в data.frame (это нужно для анализа).Получить data.frame из json (r language)

Например, у меня есть JSon файл:

"user_id":"severalHint","device_id": "dfg4644fsnthj" 
"user_id":"berrrrka","session_time": "2314" 

И я хочу, чтобы превратить это таблица данных, как это:

user_id  device_id  session_time 
1 severalHint dfg4644fsnthj NA 
2 berrrrka  NA   2314 

Я поворачиваю JSON, чтобы перечислить здесь dput:

list(structure(list(data = structure(list(ios_idfv = "57BE266B-CA71-4C53-9F28-4CE0F6FFDB55", 
    engine_version = "unity 4.6.9", category = "resource", os_version = "ios 9.2", 
    ios_idfa = "256A9626-DD07-40C2-BB3F-862F26D89DEF", amount = 100, 
    v = 2, sdk_version = "unity 2.4.3", user_id = "256A9626-DD07-40C2-BB3F-862F26D89DEF", 
    session_num = 2, platform = "ios", connection_type = "wifi", 
    manufacturer = "apple", client_ts = 1457359485, session_id = "a4671aaa-bd13-4655-a42f-c333a9709c58", 
    device = "iPad4,5", event_id = "Source:Credits:Reward:DailyReward", 
    build = "1.0"), .Names = c("ios_idfv", "engine_version", 
"category", "os_version", "ios_idfa", "amount", "v", "sdk_version", 
"user_id", "session_num", "platform", "connection_type", "manufacturer", 
"client_ts", "session_id", "device", "event_id", "build")), first_in_batch = TRUE, 
    country_code = "RU", arrival_ts = 1457359488, game_id = 24540, 
    ip = "95.107.103.0", user_meta = structure(list(install_ad = "80961452183", 
     install_ad = "80961452183", install_ad = "80961452183", 
     install_ad = "80961452183", install_campaign = "wizzo", 
     install_campaign = "wizzo", install_campaign = "wizzo", 
     install_campaign = "wizzo", install_publisher = "d", 
     install_publisher = "d", install_publisher = "d", install_publisher = "d", 
     install_site = "Heroes and Castles 2 Free", install_site = "Heroes and Castles 2 Free", 
     install_site = "Heroes and Castles 2 Free", install_site = "Heroes and Castles 2 Free", 
     install_ts = 1457287997, revenue = list(), cohort_week = 1456704000, 
     cohort_month = 1456790400), .Names = c("install_ad", 
    "install_ad", "install_ad", "install_ad", "install_campaign", 
    "install_campaign", "install_campaign", "install_campaign", 
    "install_publisher", "install_publisher", "install_publisher", 
    "install_publisher", "install_site", "install_site", "install_site", 
    "install_site", "install_ts", "revenue", "cohort_week", "cohort_month" 
    ))), .Names = c("data", "first_in_batch", "country_code", 
"arrival_ts", "game_id", "ip", "user_meta"))) 
+1

Пожалуйста, укажите 'dput' вашего набора данных (пожалуйста, небольшой) и желаемого вывода. –

+0

@DavidArenburg Я отредактировал мое сообщение. – Smasell

+0

@AnandaMahto Да, но я не знаю, что такое «dput» – Smasell

ответ

2

Хорошо, давайте начнем с примера вашего json:

js = '[ 
      {"user_id":"severalHint","device_id": "dfg4644fsnthj"}, 
      {"user_id":"berrrrka","session_time": "2314"} 
     ]' 

Это просто может быть преобразован в пакет rjson к списку:

require(rjson) 
js.list = fromJSON(js) 

Кроме того, вы можете найти хороший поток, который обсуждает конвертирование списки кадров данных здесь: Convert R list to dataframe with missing/NULL elements

В нашем примере код будет

library(plyr) 

rbind.fill(lapply(js.list, function(f) { 
    as.data.frame(Filter(Negate(is.null), f)) 
})) 

, что приводит к выходу

 user_id  device_id session_time 
1 severalHint dfg4644fsnthj   <NA> 
2 berrrrka   <NA>   2314 

и должен решить вашу проблему.

+0

Работает отлично. Многие THX) – Smasell

Смежные вопросы