2013-05-21 3 views
0

Мне нужно объединить два кадра данных, которые выглядят так: Я хочу взять общий столбец между кадрами данных и объединить их вместе. Строки в двух кадрах данных будут совершенно разными.объединить два кадра данных в R на основе общих столбцов

 a b c 
row1 1 0 1  
row2 1 0 1 

другой dataframe

 d a c f 
row3 1 0 1 1 
row4 1 1 0 0 

Я хочу, чтобы конечный набор данных, чтобы посмотреть, как этот

 a c 
row1 1 1 
row2 1 1 
row3 0 1 
row4 1 0 

Вот это dput из двух dataframes

dput(x1) 
structure(list(d = c(1L, 1L), a = 0:1, c = c(1L, 0L), f = c(1L, 
0L)), .Names = c("d", "a", "c", "f"), row.names = c("row3", "row4" 
), class = "data.frame") 

dput(x2) 
structure(list(a = c(1L, 1L), b = c(0L, 0L), c = c(1L, 1L)), .Names = c("a", 
"b", "c"), row.names = c("row1", "row2"), class = "data.frame") 
+0

'merge' ........ – Thomas

ответ

5

Вы можете получить общие имена и затем использовать строку привязки:

common <- intersect(names(x1), names(x2)) 
rbind(x1[,common], x2[,common]) 
    a c 
row3 0 1 
row4 1 0 
row1 1 1 
row2 1 1 

EDIT: Для того, чтобы соответствовать вашему Ожидаемым результатом

rbind(x2[,common], x1[,common]) 
    a c 
row1 1 1 
row2 1 1 
row3 0 1 
row4 1 0 
+0

Hi I просто еще одно сомнение. Как я могу печатать строки3 и row4 один раз после строки1 и один раз после строки2? –

1

очень зачаточном версия

> X <- merge(x1, x2, all=TRUE) 
> X[, which(colSums(!is.na(X))==nrow(X))] 
    a c 
1 0 1 
2 1 0 
3 1 1 
4 1 1 
Смежные вопросы