Подтвердить что ты не робот

R список списков в data.frame

У меня есть список списков, назовите его listHolder, который имеет длину 5.

Каждый элемент в listHolder представляет собой список числовых данных с примерно 160 элементами.

Мне нужно превратить этот список списков в data.frame длины 5, причем каждый элемент представляет собой числовой вектор с 160 элементами.

Но все, что я пробовал, повторяя список списков и поворачивая каждый элемент с помощью as.numeric(unlist(listHolder[[i]])), на

data.frame(matrix(unlist(listHolder), nrow = length(totalKeywords), byrow = T))

заканчивает создание кадра данных длиной 160 или около того, причем каждый элемент представляет собой числовой вектор с 5 или около того элементами.

Как мне сделать то, что я хочу?

Попытка data.frame(matrix(unlist(totalKeywords), nrow=132, byrow=T)) дает противоположность тому, что я хочу - 160 мелких предметов, каждый из которых содержит 5 элементов.

4b9b3361

Ответ 1

Значение nrow должно быть зафиксировано. Я исправил ваш код следующим образом:

dd  <-  as.data.frame(matrix(unlist(listHolder), nrow=length(unlist(listHolder[1]))))

Ответ 2

AS @dimitris_ps, упомянутый ранее, ответ может быть:

do.call(rbind, listHolder)

Так как do.call естественно " разделяет " 1 уровень "списка списка", получается список, а не список списков.

После этого rbind может обрабатывать элементы в списке и создавать матрицу.

Ответ 3

Это дает аналогичный результат, но более интуитивно (по крайней мере, для меня)

#Generate fake data 
listoflists=list(c(1,'a',3,4),c(5,'b',6,7))

#Convert to a dataframe, transpose, and convert the resulting matrix back to a dataframe
df= as.data.frame(t(as.data.frame(listoflists)))

#Strip out the rownames if desired
rownames(df)<-NULL

#Show result
df

Ответ 4

Я думаю, что это проще, чем предыдущие решения:

mydf = data.frame(x1 = c('a', 'b', 'c'))
mylist = list(c(4, 5), c(4, 5), c(4, 5))
mydf$x2 = mylist
print(mydf)
  x1   x2
1  a 4, 5
2  b 4, 5
3  c 4, 5