Перевести запрос SQL в R
-
- Новоприбывший
- Сообщения: 10
- Зарегистрирован: 09 фев 2016, 11:03
- Репутация: 0
Перевести запрос SQL в R
Добрый день! Пытаюсь перевести запрос SQL, но не хватает знаний. О merge, aggregate почитала, но не получается все так, как хотелось бы.
select a.id_res, a.period, a.id, a.id1, a.marital,
sum(b.var) as sum_b, count(b.var) as count_b
from (select id_res, period, id, id1, rank() over (partition by id, id1 order period) as rank, marital
from table1 where rank=1) as a
left join table2 as b
on a.id=b.id and a.id1=b.id1
where a.period<b.period
group by a.id_res, a.period, a.id, a.id1, a.marital
select a.id_res, a.period, a.id, a.id1, a.marital,
sum(b.var) as sum_b, count(b.var) as count_b
from (select id_res, period, id, id1, rank() over (partition by id, id1 order period) as rank, marital
from table1 where rank=1) as a
left join table2 as b
on a.id=b.id and a.id1=b.id1
where a.period<b.period
group by a.id_res, a.period, a.id, a.id1, a.marital
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Перевести запрос SQL в R
У Вас, видимо, таблицы уже переведены в R? Это пока все, что можно понять из Вашего вопроса :0)
Что за таблицы, какие у них поля? Что нужно получить? Что за СУБД -- судя по всему Postgres? Чем не устраивает RPostgreSQL?
Что за таблицы, какие у них поля? Что нужно получить? Что за СУБД -- судя по всему Postgres? Чем не устраивает RPostgreSQL?
-
- Гуру
- Сообщения: 4058
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1055
- Ваше звание: программист
- Откуда: Казань
Re: Перевести запрос SQL в R
в R все нужные инструменты есть, но нужно самому поработать за компилятор запросов SQL, который переводит запросы в последовательность проекций (указание списка столбцов), селекций (построение индекса строк), соединений (merge) и группировок (aggregate) с созданием промежуточных таблиц. Такое делают студенты, когда учат SQL
-
- Новоприбывший
- Сообщения: 10
- Зарегистрирован: 09 фев 2016, 11:03
- Репутация: 0
Re: Перевести запрос SQL в R
С чего начать? Есть data.frame table1: id, id1,period(дата в виде числа) и еще какие-то столбцы. Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Перевести запрос SQL в R
Не морочьтесь на тему "хочу в R, но как SQL"
У вас есть таблица в R
Так и делайте из неё выборку, используя те средства, которые вы умеет в рамках R.
Пусть оно будет коряво и ни разу не оптимально - лишь бы работало. Да, это будет много if-else, промежуточных массивов. Да и фиг с ним. Вы же не на продакшен ваяеете... +- минута на выполнение запроса - не велика цена.
У вас есть таблица в R
Так и делайте из неё выборку, используя те средства, которые вы умеет в рамках R.
Пусть оно будет коряво и ни разу не оптимально - лишь бы работало. Да, это будет много if-else, промежуточных массивов. Да и фиг с ним. Вы же не на продакшен ваяеете... +- минута на выполнение запроса - не велика цена.
-
- Гуру
- Сообщения: 4058
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1055
- Ваше звание: программист
- Откуда: Казань
Re: Перевести запрос SQL в R
не будет, там все вычисляется параллельно через индексы ...jerry-maori писал(а):Да, это будет много if-else
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Перевести запрос SQL в R
К data.frame sql-запросы через пакет sqldf [https://cran.r-project.org/web/packages/sqldf/sqldf.pdf]AnnaK писал(а):С чего начать? Есть data.frame table1: id, id1,period(дата в виде числа) и еще какие-то столбцы. Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается
Некоторые ссылки на примеры работы с sqldf в R:
1) www.r-bloggers.com/make-r-speak-sql-with-sqldf/
2) www.burns-stat.com/translating-r-sql-basics/
3) anythingbutrbitrary.blogspot.ru/2012/08/manipulating-data-frames-using-sqldf.html
... Результаты внутри-вложенных подзапросов лучше, видимо, "от-sql-ить" сначала в промежуточные data.frame'ы...
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Перевести запрос SQL в R
Это по идее вообще одной строкой можно сделатьНужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
-
- Гуру
- Сообщения: 4058
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1055
- Ваше звание: программист
- Откуда: Казань
Re: Перевести запрос SQL в R
не, низзя ... aggregate() видит только один столбец, и т.д. Так что строим индексы, и т.д.Игорь Черниенко писал(а):Это по идее вообще одной строкой можно сделать
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Перевести запрос SQL в R
Я подумал, что в итоговой таблице должно быть 3 столбца -- id, id1 и min period. Если нужны все остальные поля, то, конечно, строк в скрипте будет не меньше 2-х.
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Перевести запрос SQL в R
А вот и нет, видит и сколько угодно группирующих, и любое число группируемых. Функция одна только.не, низзя ... aggregate() видит только один столбец, и т.д. Так что строим индексы, и т.д.
-
- Гуру
- Сообщения: 4058
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1055
- Ваше звание: программист
- Откуда: Казань
Re: Перевести запрос SQL в R
вы не о том - функция видит только один столбец. Иначе опять нужны индексы и косвенная адресация таблиц: обрабатывается только один столбец с данными-индексами (номерами строк), группирующих столбцов - один или несколько; функция получает индексы группы, сама добывает строки из внешней таблицы, и с ними работает.Игорь Черниенко писал(а):А вот и нет, видит и сколько угодно группирующих, и любое число группируемых. Функция одна только.
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: Перевести запрос SQL в R
Видимо, правда не о том. Но задача может быть решена одной строкой :0)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость