2015-10-14 82 views
0

我有24个数据帧需要合并。 20个数据帧具有相同的238列,而4个数据帧具有256列。而且,与其他20个数据帧相比,具有256列的4个数据帧具有不同的列顺序。仅对同一列的数据帧进行绑定

E.g. (20个数据帧)

例如,'回答','条件','msg_time','修复'等。 (4个数据帧)

''acc_value','nitem','fix','button_press_0','rotation','previous_fix','accuracy','answer','file'

我想只对那些在所有24个数据帧中相同的列进行rbind。 任何建议将非常感激。谢谢。

+2

看一看'rbind.fill'从'plyr'包,'rbindlist'从'数据.table'或'dplyr'的'bind_rows' – Jaap

回答

0

这不是最优雅的解决方案,但它的工作原理。

df <- data.frame()   # empty data.frame 
base_names <- names(a)  # base_names will reflect any data.frame that has 238 observations 
list_df <- list(a, b, c)  # list of all your data frames 

for(item in list_df){   # create loop 

    items <- item[, base_names] # only select columns that match the 238 columns 
    df <- rbind(df, items)  # append those to the data.frame 

} 

df       # all data.frames rbinded 

如果你想避免环路,也可以使用lapply

library(plyr) 
library(dplyr) 

df <- data.frame() 
base_names <- names(a) 
list_df <- list(a, b, c) 

lapply(list_df, 
     function(x){ 

     x_cols <- x[, base_names] 
     df <- rbind(df, x_cols) 

     }) %>% plyr::ldply(rbind) 
+0

非常感谢@maloneypatr。我已经尝试了两种解决方案。然而,对于循环,我得到这个错误:“错误'[.data.frame'(item,,base_names):未定义的列选择”。对于第二种解决方案,您使用“%>%”的原因是什么?因为它给出了一个错误。谢谢。 – dede

+0

不知道为什么,但我将'item'和'items'改为'dataframes',现在循环起作用。这需要一段时间,但它工作正常! :) 谢谢。 – dede

+0

啊,是的,我使用'dplyr'包中的'%>%'。我将编辑代码来反映 – maloneypatr

相关问题