Объединить data.frames по разным именам столбцов и вернуть ОБА столбцы, используемые для сопоставления - PullRequest
0 голосов
/ 24 мая 2019

Супер просто глупо. Я создаю блестящее приложение и сравниваю имена столбцов из двух таблиц. Я выбираю из файла information.schema, и люди захотят увидеть ОБА столбцов, используемых в объединениях

 X<-data.frame(table1=c("col1","col2"),types1=c("int","char(4)"))
 Y<-data.frame(table2=c("col2","col3"),types2=c("char(8)","tinyint"))

Независимо от того, что я merge и использую all=TRUE или запускаю dplyr такие команды, как left_join или full_join, каждая из этих вещей дает мне вывод, который выглядит следующим образом:

    table1   types1   types2
    col1     int      NA
    col2     char(4)  char(8)
    col3     NA       tinyint

Я хочу вернуть столбцы. Я хочу это:

    table1   table2   types1   types2
    col1     NA       int      NA
    col2     col2     char(4)  char(8)
    NA       col3     NA       tinyint

Мне не нужна свернутая версия имен столбцов в одном столбце. Я хочу сохранить столбцы в удобочитаемом для человека виде, чтобы они знали, чего не хватает.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Это не элегантно, но у меня есть обходной путь ... хотя было бы неплохо добавить аргумент в функцию.

    Y$join<-Y[,"table2"]
    JoinedTable<-merge(X,Y,by.x="table1",by.y="join",all=TRUE)
    JoinedTable[,1]<-ifelse(is.na(JoinedTable[,2]),NA,JoinedTable[,1])
1 голос
/ 24 мая 2019

Можно создать общий столбец ('grp') путем извлечения числа из 'table1 / table2' в наборах данных 'X' и 'Y', а затем объединить эту переменную

library(dplyr)
library(readr)
X %>% 
   mutate(grp = parse_number(as.character(table1))) %>% 
   full_join(Y %>%
             mutate(grp = parse_number(as.character(table2)))) %>%
   select(starts_with('table'), starts_with('types'))
#  table1 table2  types1  types2
#1   col1   <NA>     int    <NA>
#2   col2   col2 char(4) char(8)
#3   <NA>   col3    <NA> tinyint
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...