объединение дублирует столбцы, не может воспроизвести - PullRequest
0 голосов
/ 12 марта 2020

Я унаследовал большой и сложный R-скрипт, который применяет множество операций к нескольким большим наборам данных.

В какой-то момент скрипт:

  1. Принимает data.table, делает вторая сводная таблица с чем-то вроде sum_tbl = as.data.table(init_tbl)[., x = sum(x), by = c('y', 'z')]
  2. Редактирует значения sum_tbl$z и помещает их в sum_tbl$z_new
  3. Переименовывает суммированные столбцы с 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)?

1 Ответ

0 голосов
/ 12 марта 2020

Вам удобно пытаться переписать части кода, в частности, объединение / объединение, с другой библиотекой?

Если вы используете dplyr, вы можете попробовать что-то вроде:

df_y$z <- df_y$z_new
final_tbl <- semi_join(init_tbl, sum_tbl, by = c("y", "z"))

Я бы, вероятно, переименовал dfs или запустил отдельный скрипт, чтобы вы могли сравнить два объединенных / объединенных df, чтобы увидеть, получаете ли вы одинаковые результаты. Я не очень опытен с data.table, поэтому я не уверен, что может быть причиной этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...