r - 如何将 tibble 中的 JSON 列转换为新列
问题描述
我有一个 csv 文件,其中一列是 JSON。这是 JSON 的示例。
{"sg_template_id":"d-65910500a27a4992bd8ac7","sg_template_name":"trial-end"}
ID | 电子邮件 | 参数 |
---|---|---|
1 | 示例@yahoo.com | {“sg_template_id”:“d-65910500a27a4992bd8ac7”,“sg_template_name”:“试用结束”} |
2 | 示例@aol.com | {“sg_template_id”:“d-7878787987877a27a4992b”,“sg_template_name”:“欢迎”} |
structure(
list(
email = c("examole@yahoo.com\t", "example@aol.com\t"),
id = c(1, 2),
arrgs = c(
"{ \"sg_template_id\" : \"d-65910500a27a4992bd8ac7\" , \"sg_template_name\" : \"trial-end\" }",
"{ \"sg_template_id\" : \"d-7878787987877a27a4992b\" , \"sg_template_name\" : \"welcome\" }"
)
),
row.names = c(NA,-2L),
class = c("tbl_df", "tbl", "data.frame")
)
我想用 CSV 文件中的所有列制作一个小标题。此外,我希望 JSON 中的所有键都转换为具有此 JSON 值的新列。
有没有办法快速轻松地做到这一点?
这是最终结果的样子
ID | 电子邮件 | sg_template_id | sg_template_name |
---|---|---|---|
1 | 示例@yahoo.com | d-65910500a27a4992bd8ac7 | 试用结束 |
2 | 示例@aol.com | d-7878787987877a27a4992b | 欢迎 |
解决方案
您可以使用包中的fromJSON
函数jsonlite
来读取 json 并使用map_df
.
library(dplyr)
library(purrr)
library(jsonlite)
df %>%
select(-arrgs) %>%
bind_cols(map_df(df$arrgs, fromJSON))
# A tibble: 2 x 4
# email id sg_template_id sg_template_name
# <chr> <dbl> <chr> <chr>
#1 "examole@yahoo.com\t" 1 d-65910500a27a4992bd8ac7 trial-end
#2 "example@aol.com\t" 2 d-7878787987877a27a4992b welcome
推荐阅读
- javascript - React – 向数组映射添加唯一键
- maven - 如何跳过 Maven 默认部署而不是在 pom 中使用部署插件?
- python - 获取目录后更新文件路径
- amazon-web-services - AWS Autocaling 计划操作 - 每日发生的操作消失且容量未重置
- python-2.7 - 使用 Python+OpenCV 多进程应用程序防止相机延迟
- python - 从 Uber Ludwig 中的图像发布训练模型
- java - 隐藏多个空文本视图
- python - 反映 SQL Server 表时删除排序规则表达式
- javascript - 不能在函数中调用 React Hook
- sql - 仅在创建时禁止空值,但在修改表时允许?