2014-06-18 6 views
1

sqldf ("id, group, sum (v1), sum (v2), ...)를 선택하여 ID별로 데이터 그룹에서 요약을 수행한다고 가정합니다. 그룹 "),R 패키지 sqldf 복수 열 합계

나는 90 개 이상의 변수를 가지고 있기 때문에 효율적으로 90 번 입력하는 방법이 있습니까?

감사합니다.

+1

'sqldf '를 사용해야합니까? 'dplyr' 패키지는'summarise_each'를 가지고 있습니다. – rrs

+0

힌트를 보내 주셔서 감사합니다! sqldf를 사용할 필요는 없습니다. 나는 R을 배우고 SQL을 사용하여 sqldf에 상응하는 것이 있는지 알고 싶었습니다. – ponyhd

답변

4

내장 된 anscombe 데이터 세트를 사용하면 예제의 경우 idgrp 열이 추가됩니다. 그런 다음, 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) 
+0

정말 고마워요! 이것은 정말 도움이됩니다! 이 경우 집계가 매우 직선 인 것처럼 보입니다. – ponyhd