2015-04-10 2 views
0

У меня есть цикл, который проходит дважды. В конце каждой итерации создается два ... «новых» .... и «разные» множества наблюдений ..... которые я храню в dataframes dataA и dataB. Я объединять эти два набора данных dataA и dataB, используя left_join и создавая один один окончательный набор данных.rbind на наборе данных внутри цикла

days = seq(from=as.Date('2011-08-01'), to=as.Date("2011-08-02"),by='days') 
for (i in seq_along(days)) 
{ 
    . 
    . 
    dataA 
    . 
    . 
    dataB 
    . 
    . 
    dataC = left_join(dataA, dataB, by="ID")  

} 

То, что я хочу, чтобы набор данных Datac обновить что-то вроде rbind после каждой итерации. В конце 1-й итерации dataC будет иметь 100 наблюдений на 2-й итерации, создаст 50 новых наблюдений, поэтому это должно быть обновлено в dataC, а dataC должен иметь 100 + 50 = 150 наблюдений. Не подскажите, с чего начать, нужна помощь в этом.

ответ

1

Перед вашей петлей:

DataD <- data.frame() 

В конце своего цикла:

DataD <- rbind(DataD, DataC) 
+0

@nicola, Romain и maRtin, это сработало отлично, но мне интересно, если закончится память, если я увеличу число итераций –

+0

Вы можете экспортировать таблицу csv на каждой итерации и объединить их в самом конце. Это должно сократить использование памяти во время выполнения цикла. – maRtin

+0

ваше предложение может быть идеальным, но я должен подумать о том, как его реализовать. –

3

Попробуйте это:

#initialize a list before the loop 
res<-vector("list",length(days)) 
#inside the loop set the i-th element of the list 
res[[i]]<-left_join(dataA, dataB, by="ID") 
#rbind all the elements after the loop 
res<-do.call(rbind,res) 
+2

Или используйте 'dplyr :: bind_rows' вместо' делать .call (rbind) ' –

Смежные вопросы