У меня есть следующий список:
library(rjson)
j <- fromJSON(file='https://esgf-data.dkrz.de/esg-search/search/?offset=0&limit=1000&type=Dataset&replica=false&latest=true&project=CORDEX&domain=EUR-11&experiment=rcp85&time_frequency=day&facets=rcm_name%2Cproject%2Cproduct%2Cdomain%2Cinstitute%2Cdriving_model%2Cexperiment%2Cexperiment_family%2Censemble%2Crcm_version%2Ctime_frequency%2Cvariable%2Cvariable_long_name%2Ccf_standard_name%2Cdata_node&format=application%2Fsolr%2Bjson')
Меня интересует извлечение данных из этого компонента: j$response$docs
, который представляет собой список списков. Все «внутренние» списки должны иметь одинаковые имена.
Я хочу сохранить вывод в data.frame()
или tibble()
.
Это ниже работает и дает желаемый результат для нескольких выбранных переменных:
nmod <- length(j$response$docs)
for (i in 1:nmod) {
#select one list at a time
j1 <- j$response$docs[[i]]
tmp <- data.frame(variable=j1$variable,
variable_long_name=j1$variable_long_name,
rcm_name=j1$rcm_name,
driving_model=j1$driving_model,
cf_standard_name=j1$cf_standard_name
)
#join them
if (i==1) {
d <- tmp
} else {
d <- rbind(d, tmp)
}
}
Однако я хотел бы знать, есть ли более элегантный и эффективный способ, возможно, с использованием tidyr
, dplyr
или purrr
, который также позволил бы мне выбрать все «столбцы», а не только несколько выбранных там.
bind_rows
изdplyr
, который ожидает список. Его можно было бы переместить за пределы цикла, и вам не понадобился бы оператор if. - person Lespied   schedule 20.04.2017lapply(,'[[')
для извлечения списка в первую очередь. - person Lespied   schedule 20.04.2017lapply(j$response$docs, '[[', 'variable_long_name')
, но не более одного за раз. Я пропустил простой способ сделать это? - person AF7   schedule 20.04.2017