Почему я получаю эту ошибку при объединении двух фреймов данных? - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь объединить два фрейма данных с именами столбцов, называемыми «командами».

Мой оператор слияния -

merge(RB,LB,by.x ="team")

Ошибка, которую я получаю -

Ошибка в merge.data.frame (RB, LB, by.x = "team"): "by.x" и "by.y" указывают различное количество столбцов.

#Create a data frame to store set of Right-Backs
      RB=data.frame(
       team=c("Liverpool",
     "Manchester United",
     "Chelsea","Atletico Madrid",
     "Juventus",
     "Real Madrid"),
     players=c("Trent-Alexandre Arnold",
        "Diogo Dalot",
        "Cesar Azpilicueta",
        "Keiran Trippier",
        "Danilo","Carvajal")
      ,stringsAsFactors = FALSE)

   #Create a data frame to store set of Left-Backs
    LB=data.frame(
    team=c("Manchester United",
     "Real Madrid",
     "Liverpool",
     "Chelsea",
     "Juventus",
     "Atletico Madrid"
     ),
     players=c("Luke Shaw","Marcelo","Andrew Robertson","Marcos Alonso","Alex Sandro", "Renan Lodi" ),
    stringsAsFactors = FALSE
     )

Ответы [ 2 ]

3 голосов
/ 06 октября 2019

Вы должны указать как by.x и by.y, так и просто использовать by:

df <- merge(RB,LB, by.x="team", by.y="team")
df <- merge(RB,LB, by="team")

Из ссылки:

По умолчанию кадры данныхобъединяются в столбцы с именами, которые у них обоих есть, но отдельные спецификации столбцов могут быть заданы by.x и by.y.

Если вы не используете by.y, вводby равно intersect(names(x), names(y)) используется по умолчанию. Поскольку by.x имеет только один столбец, а by.y - два (т. Е. Имеют разную длину), функции завершаются.

0 голосов
/ 06 октября 2019
> merge(RB, LB, by = "team")
           team              players.x        players.y
1   Atletico Madrid        Keiran Trippier       Renan Lodi
2           Chelsea      Cesar Azpilicueta    Marcos Alonso
3          Juventus                 Danilo      Alex Sandro
4         Liverpool Trent-Alexandre Arnold Andrew Robertson
5 Manchester United            Diogo Dalot        Luke Shaw
6       Real Madrid               Carvajal          Marcelo

Или вы можете достичь того же результата, используя left_join () из пакета dplyr.

> left_join(RB,LB, by = "team")
           team              players.x        players.y
1         Liverpool Trent-Alexandre Arnold Andrew Robertson
2 Manchester United            Diogo Dalot        Luke Shaw
3           Chelsea      Cesar Azpilicueta    Marcos Alonso
4   Atletico Madrid        Keiran Trippier       Renan Lodi
5          Juventus                 Danilo      Alex Sandro
6       Real Madrid               Carvajal          Marcelo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...