Извлечение, форматирование и разделение JSON, уже сохраненного в столбце фрейма данных

Как я могу проанализировать и обработать JSON, который уже находится внутри фрейма данных?

Пример данных:

df <- data.frame(
    id = c("x1", "x2"), 
    y = c('[{"Property":"94","Value":"Error"},{"Property":"C1","Value":"Found Match"},{"Property":"C2","Value":"Address Mismatch"}]', '[{"Property":"81","Value":"XYZ"},{"Property":"D1","Value":"Blah Blah"},{"Property":"Z2","Value":"Email Mismatch"}]')
)

Я хочу извлечь, отформатировать и отделить необработанный JSON в столбце y в упорядоченные столбцы, в идеале с library(jsonlite),

Заранее спасибо!

1 ответ

Решение

С помощью jsonlite и тидиверс:

library(tidyverse)
library(jsonlite)

df %>% mutate(y = map(y, ~fromJSON(as.character(.x)))) %>% unnest()

# Source: local data frame [6 x 3]
# 
#       id Property            Value
#   <fctr>    <chr>            <chr>
# 1     x1       94            Error
# 2     x1       C1      Found Match
# 3     x1       C2 Address Mismatch
# 4     x2       81              XYZ
# 5     x2       D1        Blah Blah
# 6     x2       Z2   Email Mismatch

или без purrr,

df %>% rowwise() %>% mutate(y = list(fromJSON(as.character(y)))) %>% unnest()

или просто dplyr а также jsonlite,

df %>% rowwise() %>% do(data.frame(id = .$id, fromJSON(as.character(.$y))))

или только с базой R и jsonlite,

do.call(rbind, 
        Map(function(id, y){data.frame(id, fromJSON(as.character(y)))}, 
            df$id, df$y))

Все возвращают одно и то же, так что выбирайте, что для вас наиболее разумно.

Другие вопросы по тегам