[R] subset
subset
: 조건에 만족하는 데이터를 선택하는 함수
employees[employees$DEPARTMENT_ID==20,] : 모든 열의 값이 NA인 행 존재
employees[which(employees$DEPARTMENT_ID==20),] : 모든 열의 값이 NA인 행은 출력되지 않음
subset(employees,employees$DEPARTMENT_ID==20) : 모든 열의 값이 NA인 행은 출력되지 않음
subset(employees,DEPARTMENT_ID==20,select=c('LAST_NAME','SALARY'))
: select를 통해 출력하고 싶은 열 설정 가능
subset(employees,DEPARTMENT_ID==20,select=c(LAST_NAME,SALARY)) : ’ ’없어도 됨
[문제120] 30번 부서 사원이면서 급여는 3000이상 받는 사원들의 LAST_NAME, HIRE_DATE,SALARY,DEPARTMENT_ID를 출력해주세요.
subset(employees,DEPARTMENT_ID==30 & SALARY >=3000,
select=c('LAST_NAME', 'HIRE_DATE','SALARY','DEPARTMENT_ID'))
[문제121] 입사한 날짜가 2002, 2003년도에 입사한 사원들의 last_name, hire_date, salary, job_id, department_id 출력해주세요.
employees$HIRE_DATE <- as.Date(employees$HIRE_DATE,format='%Y-%m-%d')
subset(employees,format(HIRE_DATE,'%Y') %in% c('2002','2003'),
select=c('LAST_NAME','HIRE_DATE','SALARY','JOB_ID','DEPARTMENT_ID'))
[문제122] 150번 사원의 급여보다 더 많은 급여를 받는 사원들의 last_name, salary를 출력하세요.
①
subset(employees,SALARY >= employees[employees$EMPLOYEE_ID==150,'SALARY'],select=c(LAST_NAME,SALARY))
②
sal150 <- subset(employees,EMPLOYEE_ID==150,select=SALARY)
subset(employees,SALARY >= sal150,select=c(LAST_NAME,SALARY))
subset(employees,SALARY >= sal150) #결과값 오류 : 데이터프레임값으로 비교X
subset(employees,SALARY >= as.integer(sal150)) #subset에서 비교값은 단일값으로 설정해서 비교
[문제123]부서이름별 총액,평균,최대를 출력해주세요. 소속부서가 없는 정보도 출력해주세요. DEPARTMENT_NAME SUM_SAL AVG_SAL MAX_SAL
소속부서X 7000 7000.000 7000
Administration 4400 4400.000 4400
Marketing 19000 9500.000 13000
.......
x1 <- aggregate(SALARY~ifelse(is.na(DEPARTMENT_ID),0,DEPARTMENT_ID),employees,sum)
x2 <- aggregate(SALARY~ifelse(is.na(DEPARTMENT_ID),0,DEPARTMENT_ID),employees,mean)
x3 <- aggregate(SALARY~ifelse(is.na(DEPARTMENT_ID),0,DEPARTMENT_ID),employees,max)
names(x1) <- c('DEPARTMENT_ID','SUM_SAL')
names(x2) <- c('DEPARTMENT_ID','AVG_SAL')
names(x3) <- c('DEPARTMENT_ID','MAX_SAL')
m <- merge(merge(x1,x2),x3)
result <- merge(m,departments,all.x=T)[,c('DEPARTMENT_NAME','SUM_SAL','AVG_SAL','MAX_SAL')]
result[is.na(result$DEPARTMENT_NAME),'DEPARTMENT_NAME'] <- '소속부서x'