2015-12-09 4 views
1

Я надеюсь найти способ cbind data.frames с различной длиной, но я хочу привязать data.frames без необходимости указывать длины. Поскольку длины data.frames, с которыми я буду работать, будут меняться. Я не хочу искать длины до использования cbind.Как cbind data.frames с различной длиной, не зная длины data.frames

Текущие ошибок я получаю

Error in data.frame(..., check.names = FALSE) : 
    arguments imply differing number of rows: 8, 10 

Желаемого выход с пустой

  A B 
rwone 1 2 
rwtwo 2 2 
rwthree 3 

Желаемого выход с NA

  A B 
rwone 1 2 
rwtwo 2 2 
rwthree NA 3 

Я попытался.

length(A) = length(B) 

cbind(A,B) 

Я также пробовал.

if(length(A)<length(B)) { 
    if(first==1) A = c(rep(NA, length(B)-length(A)),A);B=B 
    if(first==0) A = c(A,rep(NA, length(B)-length(A)));B=B 
} 

if(length(B)<length(A)) { 
    if(first==1) B = c(rep(NA, length(A)-length(B)),B);A=A 
    if(first==0) B = c(y,rep(NA, length(A)-length(B)));A=A 
} 

cbind(A,B) 

Любая помощь будет очень признательна.

Dre

+1

Вы, вероятно, хотите 'merge' – jeremycg

+1

Когда я использовал' merge' второй data.frame был добавлен в нижней части Первый data.frame, как 'rbind'. Я хотел бы, чтобы два data.frames были рядом. – Dre

ответ

1

Merge является наиболее простым, когда вы сращивание на столбе dataframe в отличие от rownames. Если вы назначаете столбец в обоих файлах данных одинаковыми с именами розеток, то слияние должно работать. Это работает для меня:

A = data.frame(A = c(1, 2)) 
B = data.frame(B = c(2,2,3)) 
A$key = row.names(A) 
B$key = row.names(B) 

merge(A, B, all = TRUE) 

Вы также можете использовать join из plyr библиотеки.

library(plyr) 
join(A, B, by = "key", type = "full") 
0

небольшая модификация ответ Нэнси используя слияние на основе this post

A = data.frame(A = c(1, 2)) 
B = data.frame(B = c(2,2,3)) 
A$key = 1:nrow(A) 
B$key = 1:nrow(B) 

merge(A, B, all = TRUE)