Хитрый. Вот мои мысли. Кроме того, не очень полезно не предоставлять dput
ваших данных.
Сначала мне нужно воссоздать набор данных, который похож на ваш (дополнительная работа для меня):
test <- list(
list(
answers = list(
values = list("6", "8", "4", "11", "18"),
question = list("some_text_1", "some_text_2", "some_text_3"))
),
list(
answers = list(
values = list("male"),
question = list("some_text_4", "some_text_5", "some_text_6"))
)
)
)
С некоторые усилия я могу сделать это:
l1 <- lapply(test, function(x) lapply(x,`[[`, 1))
l2 <- unlist(l1, recursive = FALSE)
l3 <- unlist(l2, recursive = FALSE)
С таким результатом:
> l3
$answers1
[1] "6"
$answers2
[1] "8"
$answers3
[1] "4"
$answers4
[1] "11"
$answers5
[1] "18"
$answers
[1] "male"
Или проще:
unlist(l1)
Но последний теряет структуру и все values
векторы заканчиваются как один символьный вектор. В вашем списке, я думаю, это даст вам все values
векторов на 3-м уровне вложенности в виде списка с элементами неравной длины. Поскольку ваши values
векторы имеют неравную длину, я, вероятно, не буду пытаться принуждать это к кадру данных. Это достаточно близко?
ОБНОВЛЕНИЕ
Теперь, обновив набор данных, мы можем сделать:
l1 <- lapply(t, `[[`, 1)
l2 <- unlist(l1, recursive = FALSE)
df <- as.data.frame(l2)
с этим выводом:
> df
values values.1 values.2 values.3 values.4 values.5
1 male 6 9 9 other 145