Nano Hash - криптовалюты, майнинг, программирование

R Data Wrangling: как эффективно объединить сотни фреймов данных с часто разными заголовками и структурами столбцов в одну главную таблицу?

У меня есть несколько сотен фреймов данных, каждый из которых содержит информацию о сотруднике, такую ​​как возраст, пол, должность, дата рождения и т. Д. Проблема в том, что большинство файлов имеют разные заголовки столбцов и структуру данных.

Я пытаюсь собрать как можно больше информации из каждого файла, то есть не всю, а, может быть, 70-80%, которую можно эффективно захватить с помощью простого сопоставления столбцов или алгоритма.

Эти данные будут объединены в одну «Главную таблицу переписи», содержащую общие столбцы, такие как столбцы, перечисленные выше, которые затем будут загружены на SQL Server.

Моей первой идеей для достижения этого было создание ключа главного столбца, который отображает несколько вариантов одного столбца в стандартизованный заголовок. Например, столбец «Пол» будет сопоставлен, если заголовок соответствующего столбца входного файла содержит («пол», «пол», «мужчина / женщина», «мужчина / женщина»).

Любые совпадающие столбцы будут добавлены в основную таблицу, а в столбцах останутся пустые ячейки, в которых не было найдено совпадений.

Как лучше всего этого добиться? Операторы «if» в цикле для каждого заголовка столбца, который проверяет совпадения в ключе преобразования столбца? Есть ли для этого другие подходящие функции / пакеты?

Я изо всех сил пытаюсь осознать, что вытаскивает целые столбцы в новый фрейм данных на основе условной логики без написания запутанных циклов «если, то», а также удостоверяется, что структура данных приведена, и каждый столбец стандартизирован, т.е. столбец «Пол» содержит только « Мужской и Женский, а не смесь «М», «Ж», «Мальчик», «Девочка» и т. Д.

Любая помощь / вклад / обсуждение приветствуются.

Я могу потратить некоторое время, чтобы добавить образцы данных, если кто-то захочет лучше визуализировать то, что я имею в виду.

R Версия 3.4.4


  • Я бы рекомендовал использовать некоторые функции dplyr::select с аргументом matches, чтобы указать вектор шаблонов для сопоставления для каждого из полей, которые вы пытаетесь захватить. При этом нормализуйте имена и значения столбцов. Предполагая, что в некоторых файлах больше столбцов, чем в других, вам нужно решить, какие из них важно сохранить. Для файлов, в которых отсутствуют эти значения, вы можете заполнить эти строки значениями NA. 09.07.2018
  • вся информация на уровне сотрудников? одинаковый ли идентификатор сотрудника в каждой таблице? если нет, у этих таблиц есть уникальные ключи? 09.07.2018
  • это поможет, если вы дадите нам 3 упрощенные таблицы из 3 строк, содержащие типы проблем, с которыми вы сталкиваетесь, и результат, который вы ожидаете 09.07.2018

Ответы:


1

Без данных сложно ответить на этот вопрос, но мне приходилось делать что-то подобное в прошлом, и вот как я это сделал.

  • Загрузить все фреймы данных, найти все значения переменных (заголовков)
  • Проверьте структуру переменных в каждом фрейме данных
  • Сохраните эти данные в списке с первой записью, содержащей данные для заголовка и типов данных.

Это должно дать список заголовков и типов данных для всех фреймов.

  • После визуального сканирования этих данных определите желаемую структуру итогового фрейма данных (это ваша «Основная таблица переписи»).

На этом этапе вы можете:

  • Загрузите каждый фрейм данных,
  • Проверить заголовок
  • Исправьте переменные до соответствующего формата, удалите ненужные переменные, добавьте необходимые (вы можете использовать rep(NA, each = nrow(df)) или другое значение) для отсутствующих значений.
  • rbind() результаты

Если у вас есть более подробные сведения, я могу ответить более подробно, но в основном вам нужна стратегия, а затем написать алгоритм (который действительно может иметь много ifelse() вызовов) для его применения.

09.07.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..