使用Purrr附加到文件

时间:2018-02-23 20:59:42

标签: json r tidyverse purrr jsonlite

我想使用purrr::map()将新列附加到包含id变量作为标识符的表的json文件列表中。

我用这种方式阅读文件:

path <- "my_path"
files <- dir(path, pattern = "*.json")

data <- files %>%
        map(~fromJSON(file.path(path, .), flatten = TRUE)

data <- data %>%
     mutate(new_var = //do something//)

然后,我想采用这个新变量,并使用purrr map类型方法将其附加到id变量的json文件列表中。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

你快到了。

您的“添加”新变量也需要使用map来完成,因为您的数据可能是数据帧列表。

library(tidyverse)
library(jsonlite)

json <-
  '[
  {"Name" : "Mario", "Age" : 32, "Occupation" : "Plumber"}, 
  {"Name" : "Peach", "Age" : 21, "Occupation" : "Princess"},
  {},
  {"Name" : "Bowser", "Occupation" : "Koopa"}
]'


json2 <-
  '[
  {"Name" : "Luigi", "Age" : 31, "Occupation" : "Plumber"}, 
  {"Name" : "Toad", "Age" : 32, "Occupation" : "Majordomo"},
  {},
  {"Name" : "Koopa", "Occupation" : "Henchman"}
]'


list(json, json2) %>% 
  map(~fromJSON(.x)) %>% 
  map(~mutate(.x, Game = "Super Mario Bros")) 

[[1]]
    Name Age Occupation             Game
1  Mario  32    Plumber Super Mario Bros
2  Peach  21   Princess Super Mario Bros
3   <NA>  NA       <NA> Super Mario Bros
4 Bowser  NA      Koopa Super Mario Bros

[[2]]
   Name Age Occupation             Game
1 Luigi  31    Plumber Super Mario Bros
2  Toad  32  Majordomo Super Mario Bros
3  <NA>  NA       <NA> Super Mario Bros
4 Koopa  NA   Henchman Super Mario Bros

如果您的json更复杂,我建议您阅读jsonlite的插图并阅读this帖子