将 json 转换为 R 中的数据框
converting json to data frame in R
我知道 Stack Overflow 上已经有几个问题提出了与此类似的问题,但我似乎无法将它们应用于我的具体问题。我正在尝试将以下 json 格式的数据转换为数据框。此数据来自以下站点的 kickstarter 数据:https://webrobots.io/kickstarter-datasets/
"{\"id\":704877813,\"name\":\"Wellmii\",\"is_registered\":null,\"chosen_currency\":null,\"avatar\":{\"thumb\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=40&h=40&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=872ecbdca14ada8169b88c1794d29591\",\"small\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\",\"medium\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\"},\"urls\":{\"web\":{\"user\":\"https://www.kickstarter.com/profile/704877813\"},\"api\":{\"user\":\"https://api.kickstarter.com/v1/users/704877813?signature=1544762516.4e88d80e492ef75c79caff24e220b49c87d522c7\"}}}"
如果我将以下代码应用于数据,我会得到一个数据框,其中 "web" 和 "api" 变量是小标题。我只想要常规数据框中的数据。如何让这些变量成为常规数据框变量?
df <- data %>%
# make json, then make list
fromJSON() %>%
# remove classification level
purrr::flatten() %>%
# turn nested lists into dataframes
map_if(is_list, as_tibble) %>%
# bind_cols needs tibbles to be in lists
map_if(is_tibble, list) %>%
# creates nested dataframe
bind_cols()
数据框应具有以下变量:id、name、is_registered、chosen_currency、thumb、small、medium、web.user、api.user。最后两个变量实际上不需要 .user 在它们的末尾。 "id" 应该有 704877813 因为它是数据,名称应该有 Wellmii,is_registered 应该是 null 或 NA,等等。数据中有两个较大的部分,一个称为 "avatar",和另一个为 "urls",其中 "avatar" 部分包括 thumb、small 和 medium 变量,而 urls 部分包括 web.user 和 api.user 变量。
不确定使用 map_if
的必要性,但您可以使用 unnest
将列表列制作成标准向量。如果列表列最终具有不同的维度,则此方法将不起作用。在那种情况下,你应该直接提取你需要的东西。
library(tidyverse)
library(jsonlite)
data <- "{\"id\":704877813,\"name\":\"Wellmii\",\"is_registered\":null,\"chosen_currency\":null,\"avatar\":{\"thumb\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=40&h=40&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=872ecbdca14ada8169b88c1794d29591\",\"small\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\",\"medium\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\"},\"urls\":{\"web\":{\"user\":\"https://www.kickstarter.com/profile/704877813\"},\"api\":{\"user\":\"https://api.kickstarter.com/v1/users/704877813?signature=1544762516.4e88d80e492ef75c79caff24e220b49c87d522c7\"}}}"
data %>%
fromJSON() %>%
purrr::flatten() %>%
bind_rows() %>%
unnest()
#> # A tibble: 1 x 7
#> id name thumb small medium web api
#> <int> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 7.05e8 Wellm… https://ksr… https://ks… https://ksr… https:/… https://ap…
由 reprex package (v0.2.1)
创建于 2018-12-27
我知道 Stack Overflow 上已经有几个问题提出了与此类似的问题,但我似乎无法将它们应用于我的具体问题。我正在尝试将以下 json 格式的数据转换为数据框。此数据来自以下站点的 kickstarter 数据:https://webrobots.io/kickstarter-datasets/
"{\"id\":704877813,\"name\":\"Wellmii\",\"is_registered\":null,\"chosen_currency\":null,\"avatar\":{\"thumb\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=40&h=40&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=872ecbdca14ada8169b88c1794d29591\",\"small\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\",\"medium\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\"},\"urls\":{\"web\":{\"user\":\"https://www.kickstarter.com/profile/704877813\"},\"api\":{\"user\":\"https://api.kickstarter.com/v1/users/704877813?signature=1544762516.4e88d80e492ef75c79caff24e220b49c87d522c7\"}}}"
如果我将以下代码应用于数据,我会得到一个数据框,其中 "web" 和 "api" 变量是小标题。我只想要常规数据框中的数据。如何让这些变量成为常规数据框变量?
df <- data %>%
# make json, then make list
fromJSON() %>%
# remove classification level
purrr::flatten() %>%
# turn nested lists into dataframes
map_if(is_list, as_tibble) %>%
# bind_cols needs tibbles to be in lists
map_if(is_tibble, list) %>%
# creates nested dataframe
bind_cols()
数据框应具有以下变量:id、name、is_registered、chosen_currency、thumb、small、medium、web.user、api.user。最后两个变量实际上不需要 .user 在它们的末尾。 "id" 应该有 704877813 因为它是数据,名称应该有 Wellmii,is_registered 应该是 null 或 NA,等等。数据中有两个较大的部分,一个称为 "avatar",和另一个为 "urls",其中 "avatar" 部分包括 thumb、small 和 medium 变量,而 urls 部分包括 web.user 和 api.user 变量。
不确定使用 map_if
的必要性,但您可以使用 unnest
将列表列制作成标准向量。如果列表列最终具有不同的维度,则此方法将不起作用。在那种情况下,你应该直接提取你需要的东西。
library(tidyverse)
library(jsonlite)
data <- "{\"id\":704877813,\"name\":\"Wellmii\",\"is_registered\":null,\"chosen_currency\":null,\"avatar\":{\"thumb\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=40&h=40&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=872ecbdca14ada8169b88c1794d29591\",\"small\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\",\"medium\":\"https://ksr-ugc.imgix.net/assets/022/981/694/75c6b5ca6616e3a3adaa295fcef9d318_original.png?ixlib=rb-1.1.0&w=160&h=160&fit=crop&v=1541445663&auto=format&frame=1&q=92&s=99039218188220e2690206b2b508b19f\"},\"urls\":{\"web\":{\"user\":\"https://www.kickstarter.com/profile/704877813\"},\"api\":{\"user\":\"https://api.kickstarter.com/v1/users/704877813?signature=1544762516.4e88d80e492ef75c79caff24e220b49c87d522c7\"}}}"
data %>%
fromJSON() %>%
purrr::flatten() %>%
bind_rows() %>%
unnest()
#> # A tibble: 1 x 7
#> id name thumb small medium web api
#> <int> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 7.05e8 Wellm… https://ksr… https://ks… https://ksr… https:/… https://ap…
由 reprex package (v0.2.1)
创建于 2018-12-27