Мне нужно сделать слияние по 5 табам, каждый с общим ключом, числом столбцов с одинаковым именем и числом столбцов с уникальными именами через каждую таблицу.Поведение по умолчанию для именования столбцов для нескольких слияний ... и его изменение
Что я нахожу, заключается в том, что уникальность имени столбца ломается после объединения нескольких таблиц ... что является лучшим способом справиться с этой проблемой и заставить уникальное имя столбца?
library(data.table)
DT1<-data.table(IDs=c(1,1,2,3,4,10), V1=c(1,2,3,4,5,6))
DT2<-data.table(IDs=c(1,2,3,6,10), V2=c(6,7,8,9,10))
DT3<-data.table(IDs=c(3,4,7,8,10), V2=c(1,2,3,4,5))
DT4<-data.table(IDs=c(4,7,6,8,10), V2=c(10,11,12,13,14))
DT5<-data.table(IDs=c(4,7,6,8,10), V2=c(20,21,22,23,24))
tmp<-merge(DT1, DT2, by="IDs")
tmp
tmp<-merge(tmp, DT3, by="IDs")
tmp
tmp<-merge(tmp, DT4, by="IDs")
tmp
tmp<-merge(tmp, DT5, by="IDs")
tmp
Обратите внимание на обращение, если имена столбцов, а также то, что происходит в последней инстанции ... Я в конечном итоге с повторяющимися именами столбцов, и при попытке получить доступ к значению, я получаю только первое значение.
> tmp
IDs V1 V2
1: 1 1 6
2: 1 2 6
3: 2 3 7
4: 3 4 8
5: 10 6 10
> tmp<-merge(tmp, DT3, by="IDs")
> tmp
IDs V1 V2.x V2.y
1: 3 4 8 1
2: 10 6 10 5
> tmp<-merge(tmp, DT4, by="IDs")
> tmp
IDs V1 V2.x V2.y V2
1: 10 6 10 5 14
> tmp<-merge(tmp, DT5, by="IDs")
> tmp
IDs V1 V2.x V2.y V2.x V2.y
1: 10 6 10 5 14 24
> tmp$V2.x
[1] 10
, если вам не нужно использовать 'allow.cartesian = TRUE' (который я не вижу в ваших данных примера), вы можете присоединиться к столбцу по ссылке на ваш первый набор данных и присвоить имена новым столбцам. Я очень занят, чтобы ответить на него, но он звучит так: 'DT1 [DT2, new_col: = i.V2] [DT3, new_col2: = i.V2] [...]'. – jangorecki
Мне нужно это, чтобы получить внутреннее соединение. Если я следую вашему коду, я думаю, что мы получим полное внешнее соединение? – tcs