2013-03-28 2 views
0

У меня есть несколько одинаковых dataframes: X1, X2, ..., Х32Для петли и пасты(), чтобы объединить несколько dataframes в R

пример одного dataframe:

> X1 
    value 
1 3300320 

Я хотел бы быть_наст Juste один dataframe подобного:

> XTotal 
    value X 
1 3300320 1 
2 345098 2 
... 
32 34355 32 

Я попытался с для цикла и паст («X», я, сентябрь = «»), rbind и т.д., но каждый раз, когда я получил список строки так :

> listDF 
1 "X1" 
2 "X2" 
... 
32 "X32" 

Таким образом, я не могу назвать правильно каждый dataframe, чтобы поместить их значения в dataframe XTotal ...

Я немного потерял, любая идея?

Заранее благодарен!

ответ

1

Никогда не выращивайте объект в петле. Это очень неэффективно, так как он будет копировать весь объект каждый раз.

создать список data.frames использовать get и lapply или mget

dflist <- mget(paste('X', 1:32), envir = parent.frame()) 
# also valid 
# dflist <- lapply(paste('X', 1:32), get) 

# to combine them 
DFlist <- do.call('rbind', dflist) 


# or, faster 
library(data.table) 
DFlist <- rbindlist(dflist) 

Если data.frames не имеют одни и те же столбцы/порядок столбцов используют rbind.fill из plyr

library(plyr) 
DFlist <- rbind.fill(dflist) 

На самом деле нет необходимости создавать dflist explicity

Любое из следующих действий также будет работать

rbind.fill(mget(paste('X', 1:32), envir = parent.frame())) 
rbindlist(mget(paste('X', 1:32), envir = parent.frame())) 
do.call(rbind, mget(paste('X', 1:32), envir = parent.frame())) 
+0

Отлично! Большое спасибо! Я не знал настройки mget. – lojacobs

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