Оставьте Присоединиться и сохранить уникальные столбцы

Мне нужно слева соединить два df(X1 и X2) и оставить только уникальные столбцы.

Приведенный ниже код работает, если мне нужно сделать обычное соединение:

merge(X1,  X2)

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

X1<- data.frame("Group.Name"=c("Group1","Group2","Group1","Group2","Group2","Group2","Group1"),
                     "Sub_group_name"=c("A","A","B","C","D","E","B"),
                      "new_col"=c("Aa","Aa","Ba","Ca","Da","Ea","Ba"),
                     "Total"=c(35,26,10,9,5,11,13))

X2<- data.frame("Group.Name"=c("Group1","Group2","Group1","Group2","Group2"),
                "Sub_group_name"=c("A","A","B","C","D"),
                "new_col_b"=c(351,261,101,91,51),
                "Total_b"=c(35,26,10,9,5))

Образец спросить:

Merge column -> Group.Name
merged dataframe columns -> Group.Name,Sub_group_name,new_col,new_col_b,Total_b

Приведенный ниже код дает мне все повторяющиеся столбцы также:

merge(x=X1,y=X2,by=c,all.x=TRUE)

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

Я искал, но не мог найти ответы. Любая помощь, пожалуйста

1 ответ

Решение

Простым способом было бы сделать нормальный mergeзатем просто удалите лишние столбцы из X2 и удалите .x от любых имен.

out <- merge(x=X1,y=X2,by='c',all.x=TRUE)

# remove columns from X2
out <- out[!endsWith(names(out), '.y')]
# rename columns from X1
library(magrittr)
names(out)[endsWith(names(out), '.x')] %<>% substr(1, nchar(.) - 2)

out
#   c a b d e
# 1 1 1 2 1 1

Используемые данные:

X1 <- data.frame(a = 1, b = 2, c = 1, d = 1)
X2 <- data.frame(b = 1, c = 1, e = 1)
Другие вопросы по тегам