Объединить фреймы данных на основе имен строк в R

#r #merge #dataframe

#r #объединить #фрейм данных

Вопрос:

Как я могу объединить столбцы двух фреймов данных, содержащих отдельный набор столбцов, но несколько строк с одинаковыми именами? Поля для строк, которые не встречаются в обоих фреймах данных, должны быть заполнены нулями:

 > d
    a   b   c   d   e   f   g   h   i  j
1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10
2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9  1
> e
   k  l  m  n  o  p  q  r  s  t
1 11 12 13 14 15 16 17 18 19 20
3 21 22 23 24 25 26 27 28 29 30
> de
    a   b   c   d   e   f   g   h   i  j  k  l  m  n  o  p  q  r  s  t
1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 11 12 13 14 15 16 17 18 19 20
2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9  1  0  0  0  0  0  0  0  0  0  0
3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0  0 21 22 23 24 25 26 27 28 29 30
  

Ответ №1:

См. ?merge :

имя «row.names» или число 0 указывает имена строк.

Пример:

 R> de <- merge(d, e, by=0, all=TRUE)  # merge by row names (by=0 or by="row.names")
R> de[is.na(de)] <- 0                 # replace NA values
R> de
  Row.names   a   b   c   d   e   f   g   h   i  j  k  l  m  n  o  p  q  r  s
1         1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 11 12 13 14 15 16 17 18 19
2         2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9  1  0  0  0  0  0  0  0  0  0
3         3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0  0 21 22 23 24 25 26 27 28 29
   t
1 20
2  0
3 30
  

Комментарии:

1. Это делает работу, спасибо. Есть ли какой-нибудь более эффективный способ? Для объединения двух столбцов с 200 тыс. строк требуется несколько минут, даже для объединения пустого фрейма данных с одностолбцовым фреймом данных, содержащим 200 тыс. строк…

2. и есть ли какой-либо способ сохранить имена строк? и не перемещать их в выделенный столбец? конечно, это можно сделать rownames(de)=de$Row.names потом, просто интересно, есть ли способ не нарушать его в первую очередь…

3. как бы это не выглядело?

4. @Джон Лайк rownames(de)=de$Row.names; de=de[2:length(de)]

5. Это невозможно с merge помощью . Смотрите файл справки: «Столбцы — это общие столбцы, за которыми следуют остальные столбцы в x, а затем столбцы в y».