Как объединить несколько фреймов данных и, если уникальный ключ не существует, добавить его в качестве дополнительной строки - PullRequest
0 голосов
/ 18 октября 2019

Если у меня есть 3 набора данных:

**df1**
ID AMOUNT-2008
1  50
2  60
3  70 
4  80
6  80


  **df2**
    ID AMOUNT-2009
    2  50
    3  60
    4  70 
    5  80

  **df3**
    ID AMOUNT-2010
    6  60
    7  70
    2  80 
    8  90

Как бы я присоединился к ним, чтобы результат был

 **Combined**
  ID AMOUNT-2008   AMOUNT-2009   AMOUNT-2010
    1  50           0                
    2  60           50             80
    3  70           60             
    4  80           70             
    5               80             
    6  80                          60
    7                              70
    8                              90

левое соединение не работает, потому что, если идентификатор не существуетв одном из фреймов данных он не позволит мне добавить новую строку с идентификатором PS извините за форматирование, все еще получая руку этого

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Один метод - full join, и я бы предложил также предложение using:

select id, df1.amount_2008, df2.amount_2009, df3.amount_2010
from df1 full join
     df2
     using (id) full join
     df3
     using (id);
0 голосов
/ 18 октября 2019

Просто используйте dplyr::full_join дважды или dplyr::full_join с Reduce:

df1 <- read.table(text = "ID AMOUNT-2008
                          1  50
                          2  60
                          3  70 
                          4  80
                          6  80", header=TRUE)

df2 <- read.table(text = "ID AMOUNT-2009
                          2  50
                          3  60
                          4  70 
                          5  80", header=TRUE)

df3 <- read.table(text="ID AMOUNT-2010
                        6  60
                        7  70
                        2  80 
                        8  90", header=TRUE)

dplyr::full_join(dplyr::full_join(df1, df2), df3)
Reduce(dplyr::full_join, list(df1, df2, df3))

Это дает:

ID AMOUNT.2008 AMOUNT.2009 AMOUNT.2010
1  1          50          NA          NA
2  2          60          50          80
3  3          70          60          NA
4  4          80          70          NA
5  6          80          NA          60
6  5          NA          80          NA
7  7          NA          NA          70
8  8          NA          NA          90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...