【问题标题】:Using Purrr to append to files使用 Purrr 附加到文件
【发布时间】:2018-02-23 20:59:41
【问题描述】:

我想使用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 文件列表中。

有没有办法做到这一点?

【问题讨论】:

    标签: json r tidyverse purrr jsonlite


    【解决方案1】:

    你快到了。

    您的“添加”新变量也需要使用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 帖子

    【讨论】:

    • 谢谢!我想如果我需要匹配一个 id 来添加新变量是一样的吗? :-)
    猜你喜欢
    • 2021-12-18
    • 2019-06-24
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多