Преобразовать список в датафрейм в R
У меня есть очень недружелюбный список, и мне нужно преобразовать его в df (res) для дальнейшей обработки.
Структура столбцов всегда одинакова со значением value, count, value.1,count.1...... и т. Д. Идеальная форма датафрейма:
value count value.1 count.1 value.2 count.2
1 12 1 6 1 5
2 3 2 4 2 6
3 4 3 5 3 8
4 7 4 3
5 8
До сих пор я пытался do.call(c, lapply(res, rownames))
а также unlist(lapply(res, rownames))
но это просто перепутано и отделено в неправильных столбцах. В следующем коде я почти дошел до:
require(reshape2)
res$value<- rownames(res)
b<-melt(res)
и вывод выглядит так:
Var1 Var2 value L1
1 value 2 1
2 value 5 1
3 count 1 1
4 count 2 1
5 value 7 2
6 value 9 2
7 count 10 2
8 count 2 2
1 ответ
Один пример:
library(dplyr)
res <- structure(list(value = 1:5, count = c(12L, 3L, 4L, 7L, 8L), value.1 = 1:4,
count.1 = c(6L, 4L, 5L, 3L), value.2 = 1:3, count.2 = c(5L, 6L, 8L)),
.Names = c("value", "count", "value.1", "count.1", "value.2", "count.2"))
lapply(1:length(res), function(i) {
data.frame(Var1=seq_along(res[[i]]), Var2=names(res)[i], value=res[[i]], stringsAsFactors = F)
}) %>% do.call(rbind, .)
Var1 Var2 value
1 1 value 1
2 2 value 2
3 3 value 3
4 4 value 4
5 5 value 5
6 1 count 12
7 2 count 3
8 3 count 4
9 4 count 7
10 5 count 8
11 1 value.1 1
12 2 value.1 2
13 3 value.1 3
14 4 value.1 4
15 1 count.1 6
16 2 count.1 4
17 3 count.1 5
18 4 count.1 3
19 1 value.2 1
20 2 value.2 2
21 3 value.2 3
22 1 count.2 5
23 2 count.2 6
24 3 count.2 8