Какую команду слияния следует использовать для слияния, когда одно и то же имя столбца присутствует в нескольких наборах данных? - PullRequest
0 голосов
/ 29 июня 2018

Три набора данных следующие:

[Name]  [10th]  [Mark]
Ram     ICSE    562
Sam     CBSE    589
Deep    CBSE    523

[Name]  [12th]  [Mark]
Ram     PCM     589
Sam     CBZ     689
Deep    PCM     563

[Name]  [B.Tech]    [Mark]
Ram         Mech    589
Sam        Civil    689
Deep          IT    563

Я хочу вывод в формате ниже:

[Name]  [10th]  [Mark]  [12th]  [Mark]  [B.Tech]    [Mark]
Ram     ICSE    562      PCM    589        Mech     589
Sam     CBSE    589      CBZ    689        Civil    689
Deep    CBSE    523      PCM    563           IT    563

Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 29 июня 2018

Мы можем использовать purrr::reduce с dplyr::full_join

library(tidyverse);
reduce(list(df1, df2, df3), function(x, y) full_join(x, y, by = "Name"))
#  Name X10th Mark.x X12th Mark.y B.Tech Mark
#1  Ram  ICSE    562   PCM    589   Mech  589
#2  Sam  CBSE    589   CBZ    689  Civil  689
#3 Deep  CBSE    523   PCM    563     IT  563 

или в базе R:

Reduce(function(x, y) merge(x, y, by = "Name"), list(df1, df2, df3))
#  Name X10th Mark.x X12th Mark.y B.Tech Mark
#1 Deep  CBSE    523   PCM    563     IT  563
#2  Ram  ICSE    562   PCM    589   Mech  589
#3  Sam  CBSE    589   CBZ    689  Civil  689

Пример данных

df1 <- read.table(text =
    "Name   10th     Mark
Ram        ICSE    562
Sam        CBSE    589
Deep    CBSE    523", header = T);

df2 <- read.table(text =
    "Name    12th    Mark
Ram        PCM        589
Sam        CBZ        689
Deep    PCM        563", header = T);

df3 <- read.table(text =
    "Name    B.Tech    Mark
Ram            Mech    589
Sam           Civil    689
Deep          IT    563", header  = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...