Перевести запрос SQL в R

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
AnnaK
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 фев 2016, 11:03
Репутация: 0

Перевести запрос SQL в R

Сообщение AnnaK » 02 мар 2016, 21:05

Добрый день! Пытаюсь перевести запрос 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

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: Перевести запрос SQL в R

Сообщение Игорь Черниенко » 04 мар 2016, 03:57

У Вас, видимо, таблицы уже переведены в R? Это пока все, что можно понять из Вашего вопроса :0)

Что за таблицы, какие у них поля? Что нужно получить? Что за СУБД -- судя по всему Postgres? Чем не устраивает RPostgreSQL?

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести запрос SQL в R

Сообщение gamm » 04 мар 2016, 08:24

в R все нужные инструменты есть, но нужно самому поработать за компилятор запросов SQL, который переводит запросы в последовательность проекций (указание списка столбцов), селекций (построение индекса строк), соединений (merge) и группировок (aggregate) с созданием промежуточных таблиц. Такое делают студенты, когда учат SQL

AnnaK
Новоприбывший
Сообщения: 10
Зарегистрирован: 09 фев 2016, 11:03
Репутация: 0

Re: Перевести запрос SQL в R

Сообщение AnnaK » 04 мар 2016, 12:56

С чего начать? Есть data.frame table1: id, id1,period(дата в виде числа) и еще какие-то столбцы. Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Перевести запрос SQL в R

Сообщение jerry-maori » 04 мар 2016, 15:21

Не морочьтесь на тему "хочу в R, но как SQL"
У вас есть таблица в R
Так и делайте из неё выборку, используя те средства, которые вы умеет в рамках R.
Пусть оно будет коряво и ни разу не оптимально - лишь бы работало. Да, это будет много if-else, промежуточных массивов. Да и фиг с ним. Вы же не на продакшен ваяеете... +- минута на выполнение запроса - не велика цена.

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести запрос SQL в R

Сообщение gamm » 04 мар 2016, 17:02

jerry-maori писал(а):Да, это будет много if-else
не будет, там все вычисляется параллельно через индексы ...

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Перевести запрос SQL в R

Сообщение nickleb » 05 мар 2016, 15:41

AnnaK писал(а):С чего начать? Есть data.frame table1: id, id1,period(дата в виде числа) и еще какие-то столбцы. Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается
К data.frame sql-запросы через пакет sqldf [https://cran.r-project.org/web/packages/sqldf/sqldf.pdf]

Некоторые ссылки на примеры работы с 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

Сообщение Игорь Черниенко » 07 мар 2016, 08:12

Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
Это по идее вообще одной строкой можно сделать

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести запрос SQL в R

Сообщение gamm » 07 мар 2016, 09:40

Игорь Черниенко писал(а):Это по идее вообще одной строкой можно сделать
не, низзя ... aggregate() видит только один столбец, и т.д. Так что строим индексы, и т.д.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: Перевести запрос SQL в R

Сообщение Игорь Черниенко » 07 мар 2016, 10:28

Я подумал, что в итоговой таблице должно быть 3 столбца -- id, id1 и min period. Если нужны все остальные поля, то, конечно, строк в скрипте будет не меньше 2-х.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: Перевести запрос SQL в R

Сообщение Игорь Черниенко » 09 мар 2016, 04:38

не, низзя ... aggregate() видит только один столбец, и т.д. Так что строим индексы, и т.д.
А вот и нет, видит и сколько угодно группирующих, и любое число группируемых. Функция одна только.

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести запрос SQL в R

Сообщение gamm » 09 мар 2016, 05:03

Игорь Черниенко писал(а):А вот и нет, видит и сколько угодно группирующих, и любое число группируемых. Функция одна только.
вы не о том - функция видит только один столбец. Иначе опять нужны индексы и косвенная адресация таблиц: обрабатывается только один столбец с данными-индексами (номерами строк), группирующих столбцов - один или несколько; функция получает индексы группы, сама добывает строки из внешней таблицы, и с ними работает.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: Перевести запрос SQL в R

Сообщение Игорь Черниенко » 11 мар 2016, 04:43

Видимо, правда не о том. Но задача может быть решена одной строкой :0)

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей