【问题标题】:Return NA when missing item in jsonjson 中缺少项目时返回 NA
【发布时间】:2018-04-07 21:17:29
【问题描述】:

我有一个函数,它遍历几个 jsons 一些代码,如下所示:

my_tibble <- tibble(col_a = json$xyz$xyz,
col_b = json$xyz2$xyz2,
col_c = json$xyz3,
...)

如果 json 中缺少 col_b,我想返回一个 NA,所以这里是 json$xyz2$xyz2

现在它只是抛出一个错误:

Error: Column "col_b" must be length 1 or 36, not 0

【问题讨论】:

    标签: r list jsonlite


    【解决方案1】:

    一种选择可能是将缺失值更改为NA 作为json 本身的一部分,然后创建您的tibble。以下解决方案适用于我的 toy 列表。

    library(tidyverse)
    #First find max length in items of json
    max_length <- max(sapply(json,length))
    
    #Set length of each items so that `NA` is included 
    json<- lapply(json, function(x){
      length(x)<-max_length
      x
      })
    
    #Now cerate tibble
    my_tibble <- tibble(col_a = json$xyz$xyz,
                        col_b = json$xyz2$xyz2,
                        col_c = json$xyz3)
    

    OP 可以共享json 的详细信息,以便可以根据此解决方案对其进行验证。

    【讨论】:

    • 我喜欢你的解决方案,但是我正在迭代的 json 有可能对于我不使用的元素具有相同的结构。我宁愿在这里对 tibble 采取行动。
    • @MattnDo 好的。即使在这些情况下也可以找到解决方案。如果您可以分享sample 结构您希望解决方案工作的json 会更好。
    【解决方案2】:

    好的,我找到了解决问题的方法,这可能不是最优雅的解决方案,但至少很容易实现:

    NAfy <- function(x){
      if_else(is.null(x), NA, x)
    }
    
    my_tibble <- tibble(col_a = NAfy(json$xyz$xyz),
                        col_b = NAfy(json$xyz2$xyz2),
                        col_c = NAfy(json$xyz3))
    

    现在有用的是不要为每一列复制粘贴此函数,但这是另一个时间。

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 2013-06-15
      • 2017-07-09
      • 2019-02-13
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多