Добавьте некоторые дополнительные случаи в ваш список
groups[["group3"]] <- list()
groups[["group4"]] <- list(foo = letters[1:2])
groups[["group5"]] <- list(foo = letters[1:2], countries = LETTERS[1:2])
Вот функция, которая отображает любой список только на элементы с именем "стран"; он возвращает NULL
, если нет элементов
fun = function(x)
x[["countries"]]
Сопоставьте ваш исходный список с теми элементами, которые вам интересны
interesting <- Map(fun, groups)
Затем преобразуйте их в data.frame используя комбинацию unlist()
и rep()
df <- data.frame(
country = unlist(interesting, use.names = FALSE),
name = rep(names(interesting), lengths(interesting))
)
В качестве альтернативы используйте синтаксис tidy, например,
interesting %>%
tibble(group = names(.), value = .) %>%
unnest("value")
Выходные данные
# A tibble: 6 x 2
group value
<chr> <chr>
1 group1 USA
2 group1 JPN
3 group2 AUS
4 group2 GBR
5 group5 A
6 group5 B
Если Есть дополнительные проблемы при разборе отдельных элементов groups
, затем измените fun
, например,
fun = function(x)
as.character(x[["countries"]])