Ответ 1
Значение nrow должно быть зафиксировано. Я исправил ваш код следующим образом:
dd <- as.data.frame(matrix(unlist(listHolder), nrow=length(unlist(listHolder[1]))))
У меня есть список списков, назовите его 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 элементов.
Значение nrow должно быть зафиксировано. Я исправил ваш код следующим образом:
dd <- as.data.frame(matrix(unlist(listHolder), nrow=length(unlist(listHolder[1]))))
AS @dimitris_ps, упомянутый ранее, ответ может быть:
do.call(rbind, listHolder)
Так как do.call естественно " разделяет " 1 уровень "списка списка", получается список, а не список списков.
После этого rbind может обрабатывать элементы в списке и создавать матрицу.
Это дает аналогичный результат, но более интуитивно (по крайней мере, для меня)
#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
Я думаю, что это проще, чем предыдущие решения:
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