我需要将arbitrarily个嵌套列表展平到一个数据帧,并在一列中保留键/索引的路径,同时将底层的每个元素提取到一行.
考虑以下列表:
lst <- list(
animals = list(
lamas = c("brown", "white"),
primates = list(
humans = c("asia", "europe"),
apes = c("good", "fast", "angry")
)
),
objects = c("expensive", "cheap"),
plants = NULL
)
flatten_list(lst, delimiter="_")
的结果应该如下所示:
data.frame(
path = c("animals_lamas", "animals_lamas", "animals_primates_humans", "animals_primates_humans", "animals_primates_apes", "animals_primates_apes", "animals_primates_apes", "objects", "objects", "plants"),
value = c("brown", "white", "asia", "europe", "good", "fast", "angry", "expensive", "cheap", NA)
)
我很惊讶,我无法用tidyr或数据实现这一点.桌子.我需要一个递归函数,还是有现成的解决方案?谢谢!
EDIT: akrun提供的解决方案是基于原始数据的.我意识到,当一个元素在底层是NULL
时,就会出现一个问题,因此我重新表述了这个问题.
EDIT2我目前的解决方法是在应用akrun解决方案之前,使用函数supplied here[同样由akrun;)]递归地将NULL
替换为NA
.