我正在使用一个函数来迭代几个jsons,如下所示:
my_tibble <- tibble(col_a = json$xyz$xyz,
col_b = json$xyz2$xyz2,
col_c = json$xyz3,
...)
如果json中缺少例如NA
,我希望返回col_b
,这里json$xyz2$xyz2
。
现在它只是抛出一个错误:
Error: Column "col_b" must be length 1 or 36, not 0
答案 0 :(得分: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
的详细信息,以便可以针对此解决方案进行验证。
答案 1 :(得分:0)
好的,我找到了解决问题的方法,这可能不是最优雅的解决方案,但至少很容易实现:
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))
现在有用的是不为每一列复制粘贴此函数,但这是另一次。