컴퓨터/R

R - subset / ddply

해피밀세트 2020. 4. 16. 16:12

 

 

subset

  • 조건에 만족하는 데이터를 선택하는 함수
  • 단일값만 비교 가능

subset(데이터프레임, 조건, select=뽑아낼 컬럼)

# 기본 사용법

subset(emp,DEPARTMENT_ID==20)

# 원하는 컬럼만 뽑아낼때 따옴표를 사용하지 않아도 된다.

subset(emp,DEPARTMENT_ID==20,select=c(LAST_NAME,SALARY))

subset(emp,DEPARTMENT_ID==20,select=c('LAST_NAME','SALARY'))

# 데이터 프레임으로 비교할수없다
# 오류나진 않지만 원하는 값이 아니다.

subset(emp,SALARY > subset(emp,EMPLOYEE_ID==101,select=SALARY))

# 단일값만 비교 가능

subset(emp,SALARY > unlist(subset(emp,EMPLOYEE_ID==101,select=SALARY)))[,c('LAST_NAME','SALARY')]

subset(emp,SALARY > as.integer(subset(emp,EMPLOYEE_ID==101,select=SALARY)))[,c('LAST_NAME','SALARY')]

 

 


ddply

  • 데이터프레임을 분할하고 함수를 적용한뒤 데이터 프레임으로 결과를 반환하는 함수
  • summarise : 기준 컬럼의 데이터 끼리 모은 함수에 적용
  • transform : 행별로 연산을 수행해서 행당 값을 출력하는 기능

ddply(데이터프레임,기준컬럼,summarise,새컬럼이름=계산함수)

ddply(데이터프레임,기준컬럼,transform,새컬럼이름=계산함수)

 

 

summarise 사용

# plyr 라이브러리 임포트

library(plyr)

# 기존방식

rbind(aggregate(SALARY ~DEPARTMENT_ID,emp,sum),
    list(NA,sum(emp[is.na(emp$DEPARTMENT_ID),'SALARY'])))

# ddply사용

ddply(emp,'DEPARTMENT_ID',summarise,sum_sal=sum(SALARY))

# 다양한 함수를 같이 있다.

ddply(emp,'DEPARTMENT_ID',summarise,

      sum_sal=sum(SALARY),

      avg_sals=mean(SALARY),

      emp_count=length(EMPLOYEE_ID))

 

 

transform 사용

# 행 별 비율 구하기 (잘못된 예)
# 기존의 변수(qty) 값이 있기 때문에 원하는 값이 안나온다.

ddply(sales,'name',transform,qty=sum(qty),pct_qty=(qty/sum(qty)))

# 행 별 비율 구하기 (올바른 예)
# 새로운 변수(s_qty)를 만들어주자.

ddply(sales,'name',transform,s_qty=sum(qty),pct_qty=(qty/sum(qty)))

# 백분율

ddply(sales,'name',transform,s_qty=sum(qty),pct_qty=(qty*100/sum(qty)))

 


 

* summarise / transform 비교 *

summarise transform

ddply(sales,'name',summarise,qty=sum(qty))

ddply(sales,'name',transform,qty=sum(qty))

 

반응형

'컴퓨터 > R' 카테고리의 다른 글

R - dplyr 라이브러리 ② summarise , group_by  (0) 2020.04.17
R - dplyr 라이브러리 ① filter, select, arrange, %>%, mutate  (0) 2020.04.16
R - merge  (0) 2020.04.15
R - 전역변수 / 지역변수  (0) 2020.04.15
R - 함수  (0) 2020.04.15