2015-09-10 3 views
-1

Заранее извинить за непредоставление воспроизводимый пример, но я надеюсь, что случай становится ясно через мое описаниеrbind время и значение векторов различной длины из списка data.frame

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

> my.list 

[[1]] 
AT0000743059.time  AT0000743059 
1   02.01.2012  24.020 
2   03.01.2012  24.225 
3   04.01.2012  24.130 
4   05.01.2012  23.935 


[[2]] 
AT0000743055.time  AT0000743055 
1   02.01.2012  24.020 
2   03.01.2012  24.225 
3   04.01.2012  24.130 
4   05.01.2012  23.935 
5   09.01.2012  24.060 

Не все объекты в списке имеют одинаковую длину. Что мне нужно, чтобы rbind каждый объект в списке рядом друг с другом таким образом, что вывод выглядит ldply этого

AT0000743059.time AT0000743059 AT0000743055.time  AT0000743055 
1   02.01.2012  24.020   02.01.2012   24.020 
2   03.01.2012  24.225   03.01.2012   24.225 
3   04.01.2012  24.130   04.01.2012   24.130 
4   05.01.2012  23.935   05.01.2012   23.935 
5   NA    NA    09.01.2012   24.060 

с использованием plyr заканчивается в

> plyr::ldply(my.list, cbind) 

    AT0000743059.time AT0000743059 AT0000743055.time AT0000743055 
1   02.01.2012  24.020 NA     NA  
2   03.01.2012  24.225 NA     NA 
3   04.01.2012  24.130 NA     NA  
4   05.01.2012  23.935 NA     NA  
5         02.01.2012   24.020 
6         03.01.2012   24.225 
7         04.01.2012   24.130 
8         05.01.2012   23.935 
9         09.01.2012   24.060 

Перемещение Nas на дно и удаление они впоследствии приводят к неприятностям с датами, которые каким-то странным образом преображаются. Надеюсь, существует эффективный способ устранения этой проблемы. Спасибо за любую помощь

+1

Вы действительно хотите их развязать или, скорее, присоединиться к ним в столбцах времени, которые кажутся более разумными? –

+0

@ Wannes Rosiers: Это было бы также решением, с которым я мог бы справиться. Вы говорите, что можно преобразовать список в большой объект xts? – Pat

ответ

0

В настоящее время, объединение определяется в цикле, вероятно, не совсем как хотелось бы, но это дает выход я предложил:

my.list <-list(
    data.frame(AT0000743059.time = c("02.01.2012","03.01.2012","04.01.2012","05.01.2012"), 
     AT0000743059 = c(24.020,24.225,24.130,23.935), 
     stringsAsFactors = FALSE), 
    data.frame(AT0000743055.time = c("02.01.2012","03.01.2012","04.01.2012","05.01.2012","09.01.2012"), 
     AT0000743055 = c(24.020,24.225,24.130,23.935,24.060), 
     stringsAsFactors = FALSE) 
) 

result <- my.list[[1]] 
colnames(result)[1] <- "time" 

for (i in 2:length(my.list)){ 
    temp <- my.list[[i]] 
    colnames(temp)[1] <- "time" 
    result <- merge(result, temp,all = TRUE) 
} 

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