2015-10-14 8 views
0

У меня есть 24 кадра данных, которые мне нужно комбинировать. 20 кадров данных имеют одинаковые 238 столбцов, вместо этого 4 кадра данных имеют 256 столбцов. Кроме того, 4 кадра данных с 256 столбцами имеют разный порядок столбцов по сравнению с другими 20 кадрами данных.rbind кадры данных только для тех же колонок

E.g. 'ответ', 'условие', 'msg_time', 'fix' и т. д. (20 кадров данных)

E.g. 'acc_value', 'nitem', 'fix', 'button_press_0', 'rotation', 'previous_fix', 'precision', 'answer', 'file', 'condition' и т. д. (4 кадра данных)

Я хотел бы использовать только те столбцы, которые одинаковы во всех 24 кадрах данных. Любое предложение было бы действительно оценено. Спасибо.

+2

Посмотрите 'rbind.fill' из' plyr' пакета, '' rbindlist' из данных .table' или 'bind_rows' из' dplyr' – 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): undefined columns selected ". Для второго решения есть причина, по которой вы использовали «%>%»? Потому что это дает ошибку. Благодарю. – dede

+0

Не знаете, почему, но я изменил 'item' на 'items' и 'items' на 'dataframes', и теперь цикл работает. Это требует времени, но все работает отлично! :) Спасибо. – dede

+0

Ahh, да, я использую '%>%' из пакета 'dplyr'. Я отредактирую код, чтобы отразить – maloneypatr