Как я могу сделать SQL как операции с фреймом данных R? - PullRequest
2 голосов
/ 04 августа 2011

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

SQL приходит на ум первым. Но так как я не заинтересован в соединениях, индексах и т. Д., Понимание списка Python сделало бы то же самое лучше с более современным синтаксисом.

Какова лучшая практика в R для таких операций?

EDIT: Пока я думаю, что я в порядке с which.max. Почему я задал вопрос таким образом, я просто узнал, что в R есть много библиотек и т. Д., Которые делают одно и то же. Просто прочитав документацию, очень сложно оценить, насколько популярным (т.е. насколько хорошо библиотека выполняет свое предназначение). Мой личный опыт работы с Python заключается в том, что в тот день, когда вы выясните, как использовать списочные выражения (с бонусом itertools), вы в значительной степени охвачены. Со временем это стало лучшей практикой, и вы не видите, например, lambda и filter, что часто в общих дебатах по питону в наши дни понимание списков делает то же самое проще и более равномерным.

Ответы [ 2 ]

7 голосов
/ 04 августа 2011

Если вы действительно имеете в виду SQL, довольно простым ответом будет пакет 'sqldf':

http://cran.at.r -project.org / web / packages / sqldf / index.html

Из справки для? Sqldf

library(sqldf)
a1s <- sqldf("select * from warpbreaks limit 6")
3 голосов
/ 04 августа 2011

Может помочь некоторый дополнительный контекст, но, судя по его звукам, вы можете искать which.max() или связанные с ним функции.Для операций по группам я по умолчанию использую семейство функций plyr, но в базе R есть более быстрые альтернативы, если скорость имеет первостепенное значение.

library(plyr)
#Make a local copy of mycars data and add the rownames as a column since ddply
#seems to drop them. I've never encountered that before actually...
myCars <- mtcars
myCars$carname <- rownames(myCars)

#Find the max mpg
myCars[which.max(myCars$mpg) ,]

                mpg cyl disp hp drat    wt qsec vs am gear carb        carname
Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.9  1  1    4    1 Toyota Corolla

#Find the max mpg by cylinder category
ddply(myCars, "cyl", function(x) x[which.max(x$mpg) ,])

   mpg cyl  disp  hp drat    wt  qsec vs am gear carb          carname
1 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1   Toyota Corolla
2 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1   Hornet 4 Drive
3 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2 Pontiac Firebird
...