【问题标题】:jsonlite is creating a data.frame with a column of class data.framejsonlite 正在创建一个带有类 data.frame 列的 data.frame
【发布时间】:2018-05-10 20:41:35
【问题描述】:

json_lite::read_json() 正在将我的 json 文件作为列表读入 R。

要重现我的问题,请将以下代码从任何文本编辑器保存为 .json 文件,然后该文件可以读入 R。

{
"data": [
{
"type": "invite",
"send_date": "2018-05-01"
},
{
"type": "reminder",
"send_date": "2018-05-03",
"tokens": {
"email_subject": "REMINDER: Franchise Exit Survey"
}
},
{
"type": "reminder",
"send_date": "2018-05-07",
"tokens": {
"email_subject": "REMINDER: Franchise Exit Survey"
}
}
],
"relationships": {
"invitee": {
"data": {
"id": "b292aa38"
}
}
}
}

可以将json文件读入R

library(jsonlite)
library(dplyr)
library(readr)

file_json <- "json_saved_from_text_editor.json"

l_json <- read_json(file_json, simplifyVector = TRUE) 

# to view the data.frame portion of l_json whose third column is itself a data.frame:
l_json[[1]]

此列表的第一个元素属于 data.frame 类,其第三列也属于 data.frame 类。我曾在 tibbles 中处理过列表列,但从未遇到过带有类 data.frame 列的 data.frame。重要的是,这个类 data.frame 的列与我遇到的任何其他列类的行为都非常不同。它不能被取消嵌套,并且它的值对整个 data.frame 的维度很敏感。

有没有办法操作、创建或只是避免这个 data.frame 列类?

我的最终目标是能够从数据框中重新创建这个小的 json 文件。但我不知道如何操作或创建这些 data.frame 列。

【问题讨论】:

    标签: r dataframe jsonlite


    【解决方案1】:

    您需要处理嵌套在 json 中的几个点。为了方便起见,我将df$data 中的实际数据保存为df_data,它有一列tokens,它本身就是一列的数据帧email_subject。如果您运行df_data %&gt;% pull(tokens) %&gt;% pull(email_subject),您将获得电子邮件主题行的向量,您可以将其放入新的数据框中。

    df_data <- df$data
    
    df_fix <- bind_cols(
        df_data %>% select(type, send_date),
        email_subject = df_data %>% pull(tokens) %>% pull(email_subject)
    )
    

    然后输出如下所示:

          type  send_date                   email_subject
      invite   2018-05-01                            <NA>
      reminder 2018-05-03 REMINDER: Franchise Exit Survey
      reminder 2018-05-07 REMINDER: Franchise Exit Survey
    

    【讨论】:

      猜你喜欢
      • 2012-03-21
      • 1970-01-01
      • 2016-01-02
      • 2019-03-21
      相关资源
      最近更新 更多