2012-06-28 4 views
3

У меня есть именованный список, который выглядит следующим образом:список символьных векторов разной длины к data.frame

> head(pathways) 
$<NA> 
NULL 
$`2` 
[1] "hsa04610" 
$`9` 
[1] "hsa00232" "hsa00983" "hsa01100" 
$`10` 
[1] "hsa00232" "hsa00983" "hsa01100" 
$<NA> 
NULL 
$<NA> 
NULL 

Чтобы описать это более раньше. Имя каждого списка - это номер идентификатора, а элементы каждого элемента символьного вектора, которые являются элементами списка, являются другим номером идентификатора. Я могу отфильтровать $<NA> записи легко с is.na(), но я хочу, чтобы изменить все остальное, так что это будет выглядеть так:

id another_id 
2 hsa04610 
9 hsa00232 
9 hsa00983 
9 hsa01100 
10 hsa00232 
10 hsa00983 
10 hsa01100 


> dput(test) 
structure(list(`NA` = NULL, `2` = "hsa04610", `9` = c("hsa00232", 
"hsa00983", "hsa01100"), `10` = c("hsa00232", "hsa00983", "hsa01100" 
), `NA` = NULL, `NA` = NULL), .Names = c(NA, "2", "9", "10", 
NA, NA)) 

Любые идеи?

+1

Это помогло бы, если бы вы отправили вывод из 'dput (head (pathways))'. –

+0

См. Править выше. Благодаря! –

+1

Так что, ожидая ответов, которые не долго (приветствия, кстати), я продолжал google и нашел этот пост http://stackoverflow.com/questions/10432993/named-list-to-from-data-frame , который в основном говорит, что я могу использовать стек (пути). Будет ли это работать? Кажется, это просто? –

ответ

6

Так что я нашел еще один ответ, который, кажется, работает.

stack(pathways)

Это кажется слишком легким, но о хорошо.

+0

приятная находка. 'stack' делает то, что вы ожидаете от' unsplit'. –

2

Так что если у вас есть список l (после удаления NA-х), то:

another_id <- unlist(l) 
id <- rep(names(l), unlist(lapply(l, length))) 
data.frame(id, another_id, row.names=NULL) 

даст результат.

2
#sample data 
pathways <- list(`1` = letters[1:3], `2` = LETTERS[4:5], `3` = 6:9, `4` = NULL) 

#a solution 
n <- vapply(pathways, length, integer(1)) 
id <- rep.int(names(pathways), n) 
another_id <- unlist(pathways, use.names = FALSE) 
data.frame(id = id, another_id = another_id) 
Смежные вопросы