Data.Table R: ошибка слияния более четырех DT с Уменьшить и объединить - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть список из 7 точек с таким же размером ( 1 74 2) и названиями столбцов (например, "variable" и "V1");

> head(dt1)
    variable          V1
1:      A         4.213668
2:      B      1474.040190
3:      C         4.445173
4:      D        76.960665
5:      E        81.796707
6:      F       215.312311

На основе Сценарий Майкла Олрогге MergedDT = Reduce(function(...) merge(..., all = TRUE), List_of_DTs) редакции слияния нескольких data.tables , я придумал следующее:

list<-list(dt1, dt2, ....dt7)

merged<-Reduce(function(...) merge(..., by="variable", all=T, allow.cartesian=T),list)

Это работает со списком 4, но за 4, Я получаю эту ошибку,

error in merge.data.table(..., by = "variable", no.dups = F, all = T,  : 
  x has some duplicated column name(s): V1.k1,V1.k2. Please remove or rename the duplicate(s) and try again.
In addition: Warning message:
In merge.data.table(..., by = "variable", no.dups = F, all = T,  :
  column names 'V1.k1', 'V1.k2' are duplicated in the result

Буду признателен за любые подсказки, чтобы обойти эту проблему.

1 Ответ

3 голосов
/ 10 апреля 2020

Если нам нужно изменить это в нескольких наборах данных, загрузите их в list с помощью mget. Здесь мы предполагаем, что имена объектов набора данных начинаются с 'dt', за которым следуют несколько цифр

library(data.table)
lst1 <- mget(ls(pattern = '^dt\\d+$'))
lst1 <- Map(setnames, lst1, 'V1', paste0('V', seq_along(list)))
...