Когда использовать R, когда использовать SQL?

У меня есть база данных среднего размера с большим количеством объединений и таблиц поиска.

Я больше знаком с R, чем с SQL, и использую MySQL.

Мой вопрос:

В какой момент целесообразно прекратить усложнение оператора SQL в пользу функциональности подмножества данных в R (например, merge, *apply, maply, dlplyи т. д.) в R.

С одной стороны, объединение SQL проще, чем выбор всего содержимого каждой таблицы и использование R функцию merge, чтобы объединить их. Кроме того, выполнение условного выбора в SQL уменьшит объем данных, которые необходимо импортировать в R; но разница в скорости несущественна.

С другой стороны, большое соединение со сложным предложением where становится менее понятным, чем синтаксис R.

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

Меня интересует общий ответ о том, какие шаги следует использовать с предложением SQL whereи какие шаги было бы проще выполнить с помощью R.

Иллюстрация:

Описание базы данных

здесь три таблицы: a, abи b. Каждая из таблиц aи bимеет первичный ключ id. У них есть отношение «многие-многие», которое представлено таблицей поиска ab, которая содержит поля ab.a_idи ab.b_id, которые присоединяются к . ] a.idи b.idсоответственно. В обеих таблицах есть поле time, а в таблице есть поле group.

Цель:

Вот минимальный пример соединения и подмножества, который я хочу сделать;

(Именование элементов в MySQL, например, a.idэквивалентно a$idв R)

  1. Соединение таблиц aи bс использованием abс добавлением нескольких значений b.time, связанных с каждым a.id, в качестве нового столбца;

    выберите a_time, b.time, a.id, b.id из
    соединение ab на a.id = ab.помогать
    присоедините b к b.id = ab.b_id, а затем добавьте b.time для различных значений b.id;
    
  2. Мне не нужны повторяющиеся значения b.time, мне нужно только значение b.max: для повторяющихся значений b.time, присоединенных к каждому a.id, b.max— значение b.time, ближайшее к a.time

    b.max <- max, но не превышающее его (б.время [б.время < а.время))
    
  3. добавить значение dt <- a.time - b.maxв таблицу, например, в R,
  4. для каждого отдельного значения в a.group, выберите который (мин (x.dt)))

    x.dt <- a.time - b.max
    
28
задан Brian Tompsett - 汤莱恩 4 December 2015 в 13:37
поделиться