jsonlite 正在创建一个 data.frame 列 class data.frame
jsonlite is creating a data.frame with a column of class data.frame
我的 json 文件正在被 json_lite::read_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]]
此列表的第一个元素属于 class data.frame,其第三列也属于 class data.frame。我曾在 tibbles 中使用列表列,但从未遇到过 data.frame 和 class data.frame 列。重要的是,class data.frame 的这一列与我遇到的任何其他列 class 的行为非常不同。它不能被取消嵌套,它的值对整个 data.frame 的维度敏感。
有没有办法操纵、创建或避免此 data.frame class 列?
我的最终目标是能够从数据帧重新创建这个小 json 文件。但我不知道如何操作或创建这些 data.frame 列。
您需要处理嵌套在 json 中的几个位置。为了方便起见,我将 df$data
中的实际数据保存为 df_data
,其中有一列 tokens
,它本身是一列 email_subject
的数据帧。如果您 运行 df_data %>% pull(tokens) %>% 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
我的 json 文件正在被 json_lite::read_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]]
此列表的第一个元素属于 class data.frame,其第三列也属于 class data.frame。我曾在 tibbles 中使用列表列,但从未遇到过 data.frame 和 class data.frame 列。重要的是,class data.frame 的这一列与我遇到的任何其他列 class 的行为非常不同。它不能被取消嵌套,它的值对整个 data.frame 的维度敏感。
有没有办法操纵、创建或避免此 data.frame class 列?
我的最终目标是能够从数据帧重新创建这个小 json 文件。但我不知道如何操作或创建这些 data.frame 列。
您需要处理嵌套在 json 中的几个位置。为了方便起见,我将 df$data
中的实际数据保存为 df_data
,其中有一列 tokens
,它本身是一列 email_subject
的数据帧。如果您 运行 df_data %>% pull(tokens) %>% 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