|
Oracle |
VS |
R |
1 |
max |
|
max |
2 |
min |
|
min |
3 |
sum |
|
sum |
4 |
avg |
|
mean |
5 |
count |
|
length(세로) table(가로) |
문제48. 최대 월급을 출력하시오
max(sal)
[1] 5000
문제49. 직업이 SALESMAN 인 사원들 중에서 최대월급을 출력하시오
x <- emp[ job=='SALESMAN', c('sal') ]
x2 <- max(x)
emp[sal ==x2 , c("ename", "sal")]
문제50. 직업, 직업별 최대월급을 출력하시오
SQL> select job, max(sal)
from emp
group by job;
aggregate(sal~job, emp, max)
job sal
1 ANALYST 3000
2 CLERK 3200
3 MANAGER 2975
4 PRESIDENT 5000
5 SALESMAN 1600
aggregate (sal ~ job, emp, max)
↑ ↑ ↑ ↑ ↑
그룹화 조건받는값 그룹대상 테이블 조건
문제51. 부서번호, 부서번호별 최소월급을 출력하시오
aggregate(sal~deptno, emp, min)
deptno sal
1 10 1300
2 20
800
3 30
950
4 70 3200
문제52. 부서번호, 직업, 토탈월급을 출력하시오
aggregate(sal~deptno+job, emp, sum)
deptno job
sal
1 20 ANALYST 6000
2 10 CLERK 1300
3 20 CLERK 1900
4 30 CLERK
950
5 70 CLERK 3200
6 10 MANAGER 2450
7 20 MANAGER 2975
8 30
MANAGER 2850
9 10 PRESIDENT 5000
10 30
SALESMAN 5600
문제53. 부서번호, 부서번호별 최대월급을 출력하는데
부서번호별 최대월급이 높은것부터 출력하시오
orderBy(~-sal, aggregate(sal~deptno, emp, sum) )
deptno sal
2 20 10875
3 30
9400
1 10
8750
4 70
3200
x <- aggregate(sal~deptno,emp,max)
x
orderBy(~-sal ,x[,c('deptno','sal')])
문제54. 위의 컬럼명을 한글로 부서번호, 토탈월급으로 변경하시오
x <-
orderBy(~-sal, aggregate(sal~deptno, emp, max) )
> names(x) <- c("부서번호", "토탈월급")
> names(x)
[1] "부서번호" "토탈월급"
> x
부서번호 토탈월급
1 10 5000
4 70 3200
2 20 3000
3 30 2850
55. emp테이블을 세로, 가로로 출력하시오
1. 세로로 출력
aggregate(empno~job, emp, length)
length : 행
job empno
1 ANALYST 2
2 CLERK 5
3 MANAGER 3
4 PRESIDENT 1
5 SALESMAN 4
2. 가로로 출력
table(emp$job)
job
ANALYST CLERK
MANAGER PRESIDENT SALESMAN
2 5 3 1 4
문제56. 위의 결과를 막대 그래프로 그리시오
x <- table(emp$job)
barplot(x, main="persons per job", col=rainbow(5), density=50)
문제57. 직업, 직업별 평균월급을 출력하시오
(가로 , 세로)
세로는 aggregate 그대로 쓰면 됨
세로
aggregate(empno~job, emp, mean)
job empno
1 ANALYST 7845.0
2 CLERK 8074.2
3 MANAGER 7682.0
4 PRESIDENT 7839.0
5 SALESMAN 7629.5
그룹+가로
tapply(emp$sal, emp$job, mean)
ANALYST CLERK
MANAGER PRESIDENT SALESMAN
3000.000
1470.000 2758.333 5000.000
1400.000
문제58. 위의 결과를 다시 출력하는데 소숫점 이하는 안나오게 하시오
x<-aggregate(sal~job, emp, mean)
data.table('JOB'=x$job, 'MEAN_SAL'=trunc(x$sal) )
JOB
MEAN_SAL
1: ANALYST 3000
2: CLERK 1470
3: MANAGER 2758
4: PRESIDENT 5000
5: SALESMAN 1400
x2<-tapply(emp$sal, emp$job, mean)
trunc(x2)
문제59. 입사한 년도, 입사한 년도별 평균월급을 가로로 출력하시오
x2<-tapply(emp$sal, emp$hiredate, mean)
> trunc(x2)
1980-12-17 1981-02-20 1981-02-22 1981-04-02 1981-05-01 1981-06-09
1981-09-08 1981-09-28
800 1600 1250 2975 2850 2450 1500 1250
1981-11-17 1981-12-03 1982-01-23 1987-04-19 1987-05-23
5000 1975 2250 3000 1100
근데 이건 날짜별로 한거라서 그룹화한 의미가 없어짐
x2<-tapply(sal, year(hiredate), mean)
> trunc(x2)
1980 1981 1982 1987
800 2282 2250 2050
*year로 지정하면 년도별로 그룹화 시킴
문제60. 위의 결과를 막대그래프로 그리시오
x2<-tapply(sal, year(hiredate), mean)
barplot(x2, main="Year per Mean_Sal", col=rainbow(4), density=50)
문제61. 직업, 부서번호, 직업별 부서번호별 토탈월급을 가로로 출력하시오
세로방법:
aggregate(sal~deptno+job, emp, sum)
답:
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
문제62. 위의 결과중에 NA를 0으로 출력되게 하시오
x<-tapply(sal, list(job, deptno), sum)
> x[is.na(x) ] <- 0
> x
10 20
30 70
ANALYST 0 6000 0
0
CLERK 1300 1900 950 3200
MANAGER 2450 2975 2850 0
PRESIDENT 5000 0 0
0
SALESMAN 0 0 5600
0
문제63. 직업, 입사한 년도(4자리), 직업별 입사한 년도별 토탈월급을 출력하시오
x<-tapply(sal, list(job, year(hiredate)), sum)
> x[is.na(x)] <- 0
> x
1980 1981 1982
1987
ANALYST 0 3000 0 3000
CLERK 800 950 4500 1100
MANAGER 0 8275 0
0
PRESIDENT 0 5000 0
0
SALESMAN 0 5600 0
0
문제64. 위의 결과에서 column name과 row name을 각각 출력하시오
x<-tapply(sal,
list(job, year(hiredate)), sum)
> x[is.na(x)] <- 0
x
1980 1981 1982
1987
ANALYST 0 3000 0 3000
CLERK 800 950 4500 1100
MANAGER 0 8275 0
0
PRESIDENT 0 5000 0
0
SALESMAN 0 5600 0
0
> colnames(x)
[1] "1980" "1981" "1982"
"1987"
> rownames(x)
[1] "ANALYST"
"CLERK"
"MANAGER"
"PRESIDENT" "SALESMAN"
문제65. 위 문제의 결과를 막대그래프로 그리시오
x<-tapply(sal, list(job, year(hiredate)), sum)
x[is.na(x)] <- 0
colnames(x)
rownames(x)
barplot(x, col=rainbow(7), legend=rownames(x), beside=T)
-legend 가 오른쪽 허공에 떠있는 작은박스
-beside False로 하면 다르게 분할함
문제66. 직업, 직업별 토탈월급을 원형(pie) 그래프로 그리시오
x<-tapply(sal, job, sum)
pie(x, col=rainbow(4), density=80)
문제67. 위의 그래프를 3D로 출력하시오
install.packages("plotrix")
library(plotrix)
pie3D(x, explode=0.1, labels=rownames(x))
문제68. 위 문제 시각화 결과 옆, 즉 직업 옆에 비율도 같이 출력되게 하시오
x<-tapply(sal, job, sum)
x2<-aggregate(sal~job, emp, sum)
pct<-round(x2$sal/sum(emp$sal)*100, 1)
pct
lbls <-x2$job
lbls
lbls2<-paste(lbls, ':', pct, '%')
lbls2
pie3D(x, explode=0.1, labels=lbls2)
문제69. crime_loc.csv 를 가지고 범죄유형이 살인인 장소와 건소를 출력하시오
crime_loc <-read.csv("crime_loc.csv", header=T)
attach(crime_loc)
head(crime_loc[범죄=="살인",
c("장소","건수")])
장소 건수
82 아파트
242
83 집 312
84 고속도로 1
85 노상
280
86 상점 23
87 시장노점 5
문제70. 위의 결과를 x5 변수에 담고 아래의 결과로 막대그래프를
그리시오
head(crime_loc[범죄=="살인", c("장소","건수")])
x5 <- crime_loc[범죄=="살인", c("장소","건수")]
head(x5)
x6 <- tapply(x5$건수, x5$장소, sum)
x6
barplot(x6,col=rainbow(7), beside=T )
tapply로 가로화 안하면
Error in barplot.default(x5, col = rainbow(7), beside = T) :
|
문제72. tapply 함수를 이용해서 전통시장과 대형마트간의 물품별 가격 평균을 출력하시오
|
price<-read.csv("price.csv", header=T)
head(price)
attach(price)
x<-tapply(A_PRICE, list(A_NAME, M_TYPE_NAME), mean)
x[is.na(x)] <- 0
trunc(x)
대형마트 전통시장
고등어 3313 3000
고등어(30cm,국산) 5020 3140
고등어(30cm,수입산) 3980 NA
고등어(냉동,국산) 3873 3415
고등어(냉동,수입산) 2430 2500
고등어(생물,국산) 4700 3308
문제73. 위의 결과를 다시 출력하는데 가격이 높은것부터 출력되게 하는데
대형마트를 기준으로 출력되게 하시오
head(orderBy(~-대형마트, x))
대형마트
전통시장
쇠고기(육우,불고기) 23400 15141
쇠고기(한우,불고기) 22338 17773
쇠고기 20280 0
쇠고기(한우1등급) 19779 19800
쇠고기(한우2등급) 18500 15640
돼지고기(생삼겹살) 11330 9705
'R' 카테고리의 다른 글
SQL과 R과 비교(서브쿼리) (0) | 2019.03.09 |
---|---|
SQL과 R과 비교(조인) (0) | 2019.03.09 |
SQL과 R과 비교(함수) (0) | 2019.03.09 |
SQL과 R과 비교(연산자) (0) | 2019.03.09 |
R의 자료구조 (0) | 2019.03.09 |