#r #list #dataframe
#r #Список #фрейм данных
Вопрос:
У меня есть список, в котором могут быть либо пустые записи, либо записи, содержащие один элемент, либо записи, содержащие несколько элементов.
l1 = list(integer(0), 11L, integer(0), integer(0), 11L, 11L, c(6L,
36L), 16L, 16L, integer(0), integer(0))
Я хотел бы отменить перечисление l1 и создать фрейм данных, где для пустых элементов индекс не будет отображаться вообще, а для нескольких элементов индекс будет отображаться несколько раз:
df = data_frame(entry = c(2, 5, 6, 7, 7, 8, 9), element = c(11, 11, 11, 6,
36, 16, 16))
так, например, здесь запись 7 появляется дважды, потому что в списке есть два элемента (6 и 36).
Как я могу это сделать?
Ответ №1:
Решение «низкого уровня»:
data.frame(entry=rep(seq_along(l1),lengths(l1)),element=unlist(l1))
# entry element
#1 2 11
#2 5 11
#3 6 11
#4 7 6
#5 7 36
#6 8 16
#7 9 16
Ответ №2:
У нас может быть два варианта. Создайте list
именованный, enframe
его в tbl_df
, а затем unnest
list
элемент. NULL
Элементы будут автоматически удалены
library(tidyverse)
l1 %>%
set_names(seq_along(.)) %>%
enframe %>%
unnest
Или после присвоения имени list
, stack
ему в 2 столбца data.frame
stack(setNames(l1, seq_along(l1)))[2:1]