【问题标题】:Extract, format and separate JSON already stored in a data frame column提取、格式化和分离已存储在数据框列中的 JSON
【发布时间】:2016-06-23 16:37:28
【问题描述】:

如何解析和处理已经存在于数据框中的 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"}]')
)

我想将y 列中的原始 JSON 提取、格式化和分离成有序的列,最好使用library(jsonlite)

提前致谢!

【问题讨论】:

  • 请附上您尝试过的代码以及您遇到的任何错误。
  • 我们可以使用library(dplyr); bind_rows(lapply(setNames(as.list(df$y), df$id), function(x) fromJSON(as.character(x))), .id="id")

标签: json r jsonlite


【解决方案1】:

使用 jsonlite 和 tidyverse:

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()

或仅使用dplyrjsonlite

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

所有返回相同的东西,所以选择对你最有意义的。

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 2022-01-05
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多