我的 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]]
此列表的第一个元素是类 data.frame,其第三列也是类 data.frame。我曾经在tibbles中使用过列表列,但从未遇到过带有类data.frame列的data.frame。重要的是,类 data.frame 的这一列的行为与我遇到的任何其他列类都非常不同。它不能是非嵌套的,并且其值对整个 data.frame 的维度很敏感。
有没有办法操作、创建或只是避免这个 data.frame 列类?
我的最终目标是能够从数据帧重新创建这个小的 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