Я унаследовал большой и сложный R-скрипт, который применяет множество операций к нескольким большим наборам данных.
В какой-то момент скрипт:
- Принимает
data.table
, делает вторая сводная таблица с чем-то вроде sum_tbl = as.data.table(init_tbl)[., x = sum(x), by = c('y', 'z')]
- Редактирует значения
sum_tbl$z
и помещает их в sum_tbl$z_new
- Переименовывает суммированные столбцы с
names(sum_tbl)[names(sum_tbl) == 'x'] = 'x_sum'
В конце сводки объединяются с оператором вроде:
final_tbl = merge(init_tbl, sum_tbl, by.x = c('y', 'z'), by.y = c('y', 'z_new'), all.x = TRUE)
В исходной среде этот скрипт выполняется без проблем. Но когда я пытаюсь перенести его в новую среду, это объединение приводит к final_tbl
, имеющему два столбца, оба с именем z
, и нарушает нисходящий код.
Я попытался воспроизвести проблему, но не смог. Очевидно, есть final_tbl$z
, который не является частью ключа слияния (init_tbl$z
соответствует init_tbl$z_new
), поэтому он дублируется. Нормальным поведением merge
в этом случае является добавление к нему суффикса ie. init_tbl$z
и final_tbl$z
должны стать sum_tbl$z
и sum_tbl$z.y
соответственно. В данном конкретном случае суффикс не добавляется, а вместо этого z
дублируется.
Где бы я начал искать для устранения этой проблемы?
- Есть ли известные ошибки или «особенности»
merge
, которые могут привести к дублированию столбцов с неоднозначными именами? - Существуют ли какие-либо глобальные параметры R, которые могут повлиять на это поведение?
- В реальной таблице есть сотни столбцов, поэтому я должен исследовать роль столкновений имен в этом (кое-что, что, возможно, могло бы избежать моей попытки MWE)?