본문 바로가기

빅데이터과정/R

#48_140821_R_GROUP 함수

728x90

# GROUP 함수





 

그룹함수

 

그룹함수 종류

max, min, sum, mean, length, range

 




 


활용 예제


 

> car <- read.csv(“accident2.csv”,header=TRUE)

 

>> 전국에서 교통사고가 가장 많이 발생하는 지역은 어디인가?

 

> car[car$cnt==max(car$cnt),c("year","city","loc","cnt")]

    year        city               loc cnt

256 2009 서울 강북구 박내과옆 먹자골목  66

 

 

>> 직업직업별 최대월급을 출력하시오

 

> aggregate(sal~job, emp, max)

        job  sal

1   ANALYST 3000

2     CLERK 3200

3   MANAGER 2975

4 PRESIDENT 5000

5  SALESMAN 1600

 

 

>> 부서번호부서번호별 토탈월금 출력

 

> aggregate(sal~deptno, emp, sum)

  deptno   sal

1     10  8750

2     20 10875

3     30  9400

4     70  3200

 

> data.table(emp)[,sum(sal),by=deptno]

   deptno    V1

1:     20 10875

2:     30  9400

3:     10  8750

4:     70  3200

 

 

>> 직업직업별 토탈월급을 출력하는데 직업이 SALESMAN 인 사원만 출력

 

> data.table(emp)[emp$job=='SALESMAN',sum(sal),by=job]

        job   V1

1: SALESMAN 5600

 

 

>> 직업직업별 토탈월급을 출력하는데 직업이 SALESMAN 사원은 제외하고 토탈월급이 5000이상인 것만 출력

 

> data.table(emp)[!emp$job=='SALESMAN',sum(sal),by=job]

         job   V1

1:     CLERK 7350

2:   MANAGER 8275

3:   ANALYST 6000

4: PRESIDENT 5000

> x <- data.table(emp)[!emp$job=='SALESMAN',sum(sal),by=job]

> x

         job   V1

1:     CLERK 7350

2:   MANAGER 8275

3:   ANALYST 6000

4: PRESIDENT 5000

> x[v1>=5000]

다음에 오류가 있습니다eval(expr, envir, enclos) : 객체 'v1'를 찾을 수 없습니다

대괄호 안에 소문자 컬럼값은 오류가 발생한다

> x[V1>=5000]

         job   V1

1:     CLERK 7350

2:   MANAGER 8275

3:   ANALYST 6000

4: PRESIDENT 5000

 

>> 위 직업별 토탈월급을 높은 것부터 낮은 것으로 정렬하여 출력

 

> library(doBy)

필요한 패키지를 로딩중입니다: survival

필요한 패키지를 로딩중입니다: splines

필요한 패키지를 로딩중입니다: MASS

> orderBy(~-V1,x)

         job   V1

1:   MANAGER 8275

2:     CLERK 7350

3:   ANALYST 6000

4: PRESIDENT 5000

 

 

> car <- read.csv(“accident2.csv”,header=TRUE)

 

>> 전국에 교통사고중 최대 건수 출력

 

> max(car$cnt)

[1] 66

 

>> 전국에서 교통사고가 가장많이 발생하는 지역

 

car[car$cnt==max(car$cnt),c("city")]

[1] 서울 강북구

 

 




 

사전작업



>> 작업 디렉토리에 위 파일을 다운받는다

 

emp <- read.csv("emp.csv",header=TRUE)

accident2 <- read.csv("accident2.csv",header=TRUE)

crime <- read.csv("crime.csv",header=TRUE)

attendance2 <- read.csv("attendance2.csv",header=TRUE)

price <- read.csv("price.csv",header=TRUE)

dept <- read.csv("dept.csv",header=TRUE)

 

 




 

그룹 함수 활용


 

>> 사원테이블에서 최대월급최소월급토탈월급평균월급인원수 출력

 

> data.frame(max(emp$sal),min(emp$sal), sum(emp$sal), mean(emp$sal), length(emp$sal) )

  max.emp.sal. min.emp.sal. sum.emp.sal. mean.emp.sal. length.emp.sal.

1         5000          800        32225      2148.333              15

 

> x <- cbind(max(emp$sal),min(emp$sal), sum(emp$sal), mean(emp$sal), length(emp$sal) )

> names(x) <- c("maxsal","minsal","sumsal","avgsal","cnt")

[1] "maxsal" "minsal" "sumsal" "avgsal" "cnt"  

> c(x)

   maxsal    minsal    sumsal    avgsal       cnt

 5000.000   800.000 32225.000  2148.333    15.000

 

 

>> 사원테이블에 사원번호이름과 월급월급-평균월급을 출력

 

> data.frame(empno,ename,sal,sal-mean(sal))

   empno  ename  sal sal...mean.sal.

1   7369  SMITH  800      -1348.3333

2   7499  ALLEN 1600       -548.3333

3   7521   WARD 1250       -898.3333

4   7566  JONES 2975        826.6667

5   7654 MARTIN 1250       -898.3333

6   7698  BLAKE 2850        701.6667

……………………………………………

 

 

>> 자신의 월급이 사원 테이블의 평균월급과 1000이상 차이가 나는 사원들만 출력

 

> x <- data.table(empno,ename,sal,diff=sal-mean(sal))

> x[diff>=1000 | diff<=-1000,]

   empno ename  sal      diff

1:  7369 SMITH  800 -1348.333

2:  7839  KING 5000  2851.667

3:  7876 ADAMS 1100 -1048.333

4:  7900 JAMES  950 -1198.333

5:  9292  JACK 3200  1051.667

 

 

 

>> 직업직업별 인원수를 출력

 

> aggregate(empno~job,emp,length)

        job empno

1   ANALYST     2

2     CLERK     5

3   MANAGER     3

4 PRESIDENT     1

5  SALESMAN     4

 

> data.table(emp)[,length(empno),by=job ]

         job V1

1:     CLERK  5

2:  SALESMAN  4

3:   MANAGER  3

4:   ANALYST  2

5: PRESIDENT  1

 

> table(emp$job)

  ANALYST     CLERK   MANAGER PRESIDENT  SALESMAN

        2         5         3         1         4

가로로 출력

 

>> attendance2 출석부에서 본인 이름만 출력

 

attendance2[attendance2$Name=='이우람',]

 

 

>> attendance2 에서 본인의 지각결석출결 상황을 조회하시오

 

> a <- attendance2[attendance2$Name=='박솔훈',c(2:41)]

> as.integer(a)

 [1] 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8

> table(as.integer(a))

0  7  8

5  5 30

0이 5, 7이 5, 8이 30번이 나온 것을 확인할 수 있다

 

 

>> 위 데이터를 이용해서 그래프 출력

 

> pie(table(as.integer(a)), col=rainbow(6))




 

 

> barplot(table(as.integer(a)),col=rainbow(6))




 

 

 

 

>> 가로 출력

 

> tapply(sal,job,sum)

  ANALYST     CLERK   MANAGER PRESIDENT  SALESMAN

     6000      7350      8275      5000      5600

> table(emp$job)

  ANALYST     CLERK   MANAGER PRESIDENT  SALESMAN

        2         5         3         1         4

> tapply(sal,deptno,sum)

   10    20    30    70

 8750 10875  9400  3200

 

 

>> 직업별부서번호별 토탈월급 출력

 

> tapply(sal,list(job,deptno),sum)

            10   20   30   70

ANALYST     NA 6000   NA   NA

CLERK     1300 1900  950 3200

MANAGER   2450 2975 2850   NA

PRESIDENT 5000   NA   NA   NA

SALESMAN    NA   NA 5600   NA

 

 

 

>> 입사한 년도별(4자리), 부서번호별 토탈월급을 가로로 출력

 

> yhiredate <- format(as.Date(emp$hiredate),"%Y")

> tapply(sal,list(yhiredate,deptno),sum)

       10   20   30   70

1980   NA  800   NA   NA

1981 7450 5975 9400   NA

1982 1300   NA   NA 3200

1987   NA 4100   NA   NA

 

 

 

>> 년도별지역별사망자수의 합을 가로로 출력

 

> data.frame(year,city= dead,serious,slight)

> tapply(dead,list(year, substr(accident2$city,1,2)),sum)

 

 

 

>> 최대최소평균각 컬럼별 카운트 횟수 등등 확인방법

 

> summary(emp)




 

 

 

 





'빅데이터과정 > R' 카테고리의 다른 글

#48_140821_R_COUNT  (0) 2014.08.21
#48_140821_R_JOIN  (0) 2014.08.21
#47_140819_R_함수  (0) 2014.08.19
#47_140819_R_정렬  (0) 2014.08.19
#47_140819_R_연산자  (0) 2014.08.19