Автоматизировать выбор столбца в базовом порядке R () - PullRequest
2 голосов
/ 26 апреля 2020

Я работаю над проектом автоматизации в R. Я хочу упорядочить входной набор данных (т. Е. Фрейм данных) по значениям строк. Запрещено использовать жестко запрограммированные значения, поскольку это автоматический код. Воспроизводимый пример ниже:

data("mtcars")
groupBY <- c('cyl','carb')

Обычно я бы включил go и заказал бы это:

mtcars_ordered <- mtcars[order(mtcars$cyl,mtcars$carb),]

или это:

mtcars_ordered <- mtcars[with(mtcars,order(cyl,carb)),]

но я нахожусь в ' автоматизированном мире ', без жестко закодированных значений. Таким образом, я ищу что-то вроде этого:

mtcars_ordered_auto <- mtcars[with(mtcars,order(groupBY)),]

order() принимает векторы, которые являются подмножествами фрейма данных, но я не могу найти способ сделать это только с R-базой.

PS В конце концов мне удалось использовать fn $ sqldf, как предлагалось здесь , написав:

groupBY_str <- paste(groupBY,collapse=',')
mtcars_ordered_sql <- fn$sqldf('select * from mtcars order by $groupBY_str').

Тем не менее, мне любопытно, как решить эту проблему с помощью базы R.

1 Ответ

2 голосов
/ 26 апреля 2020

Мы можем использовать do.call

mtcars_ordered_auto <- mtcars[do.call(order, mtcars[groupBY]),]

-проверку с выходом OP

identical(mtcars_ordered, mtcars_ordered_auto)
#[1] TRUE
...