泛化tidyjson :: spread_values

时间:2019-08-14 09:18:39

标签: r function variable-assignment

请考虑tidyjson GH page:

中的示例
#devtools::install_github("sailthru/tidyjson")
library(tidyjson)
library(dplyr)

json <- '[{"name": "bob", "age": 32}, {"name": "susan", "age": 54}]'

json %>%
  as.tbl_json %>%
  gather_array %>%
  spread_values(
    name = jstring("name"),
    age = jnumber("age")
  )

# A tibble: 2 x 4
  document.id array.index name    age
*       <int>       <int> <chr> <dbl>
1           1           1 bob      32
2           1           2 susan    54

我已提取所有JSON密钥并将其放入向量中。我正在寻找一种有效的解决方案(只需jstring即可创建表格数据集:

features <- c("name", "age", "gender", "education", "income", ...)

# spread_values(features = jstring(features))

如何在spread_values步骤中概括该列表;即,在上面的示例中,如何将nameage冷凝为单线?列的名称始终与JSON键相同。我尝试应用家庭(lapply / sapply)函数和for循环,但始终会遇到相同的赋值错误:

Error: unexpected '=' in...

干杯。

1 个答案:

答案 0 :(得分:1)

查看此question

那里有很多答案,但是最简单的方法可能是使用jsonlite包:

library(tidyjson)
library(dplyr)

json <- '[{"name": "bob", "age": 32}, {"name": "susan", "age": 54}]'

json %>%
  fromJSON

   name age
1   bob  32
2 susan  54