R пакет sqldf суммируется по нескольким столбцам

#r #sum #typing #sqldf

#r #сумма #ввод #sqldf

Вопрос:

Предположим, я хочу сделать сводку, используя sqldf («выберите идентификатор, группу, сумму (v1), сумму (v2), ….. сумму (90) из группы данных по идентификатору, группе»),

Поскольку у меня более 90 переменных, есть ли способ сделать это эффективнее, чем вводить 90 раз?

Спасибо!

Комментарии:

1. вам нужно использовать sqldf ? в dplyr пакете есть summarise_each то, что действительно удобно для подобных ситуаций.

2. Спасибо за подсказку! нет необходимости использовать sqldf. Я изучаю R и привык использовать SQL, поэтому хотел посмотреть, существует ли эквивалент в sqldf.

Ответ №1:

Используя встроенный anscombe набор данных, добавьте id и grp столбцы для примера. Затем создайте строку выбора, sel , и вставьте ее в инструкцию SQL, как показано на рисунке:

 library(sqldf)
anscombe$id <- c(1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4)
anscombe$grp <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2)

nms <- setdiff(names(anscombe), c("id", "grp")) # names except id and grp
sel <- toString(sprintf("sum(%s) '%s'", nms, nms)) # "sum(x1) 'x1', ..."
fn$sqldf("select id, grp, $sel from anscombe group by id, grp")
  

предоставление:

   id grp x1 x2 x3 x4    y1    y2    y3    y4
1  1   1 18 18 18 16 14.99 17.28 14.23 12.34
2  2   1 33 33 33 24 24.72 26.77 27.66 25.02
3  3   2 20 20 20 16 17.20 14.23 14.92 12.29
4  4   2 28 28 28 43 25.60 24.23 25.69 32.86
  

Также обратите внимание, что это легко сделать с базой R следующим образом:

 aggregate(. ~ id   grp, anscombe, sum)
  

Комментарии:

1. Большое спасибо! Это действительно полезно! Похоже, что в этом случае агрегат очень прост.