2015-08-17 3 views
1

Предположим, у меня есть list различных размеров векторов, которые выглядят следующим образом:R векторов для dataframe

> test 
[[1]] 
[1] 1 

[[2]] 
[1] 1 2 3 4 

[[3]] 
[1] 1 2 3 4 5 6 7 

Что бы лучший способ превратить это в data.frame с каждым list элементом в виде столбца , в то же время заполняя отсутствующие строки NA?

> test2 
    V1 V2 V3 
1 1 1 1 
2 NA 2 2 
3 NA 3 3 
4 NA 4 4 
5 NA NA 5 
6 NA NA 6 
7 NA NA 7 

Когда я бегу do.call(cbind.fill,test), я получаю это:

V1 V1 V1 
1 1 1 1 
2 1 2 2 
3 1 3 3 
4 1 4 4 
5 1 1 5 
6 1 2 6 
7 1 3 7 

Пытаюсь предложение:

> do.call(rbind.data.frame, test) 
    c.1L..1L..1L. c.1L..2L..2L. c.1L..3L..3L. c.1L..1L..4L. c.1L..2L..5L. c.1L..3L..6L. c.1L..1L..7L. 
1    1    1    1    1    1    1    1 
2    1    2    3    1    2    3    1 
3    1    2    3    4    5    6    7 
+2

Выполните поиск Google для 'cbind.fill'. – joran

+0

@joran Спасибо за предложение. Я пытаюсь 'do.call (cbind.fill, test)' однако я не уверен, как передать аргумент 'fill = NA' функции do call – ALKI

+0

Я не уверен, что вы говорите , – joran

ответ

1

Это будет работать:

test<-list(c(1),c(1:4),c(1:7)) 
library(qpcR) 
do.call(qpcR:::cbind.na,test) 
1

базовой R решение будет:

test <- list(1,1:4,1:7) 

do.call(cbind,lapply(test, `[`, 1:7)) 

или динамически:

m <- max(sapply(test, length)) 
do.call(cbind,lapply(test, `[`, 1:m)) 
Смежные вопросы