#title 자료 다루기 [[TableOfContents]] ==== subset ==== {{{ > 신체검사 이름 성별 키 몸무게 1 철수 남 180 80 2 영수 남 170 77 3 민수 남 160 65 4 영희 여 170 57 5 진희 여 160 50 6 민희 여 150 44 }}} 만약 키가 160이상인 사람들의 자료만 보려고 한다면 다음과 같이 subset 함수를 사용할 수 있다. {{{ > subset(신체검사,키 > 160) 이름 성별 키 몸무게 1 철수 남 180 80 2 영수 남 170 77 4 영희 여 170 57 }}} 물론 []를 사용하여 다음과 같이 표현할 수도 있다. {{{ > 신체검사[신체검사$키>160,] }}} 이름과 성별은 빼고 키와 몸무게만 알고 싶다면 다음과 같이 할 수 있다. {{{ > 신체검사.수치 = subset(신체검사,select=c(키,몸무게)) > 신체검사.수치 키 몸무게 1 180 80 2 170 77 3 160 65 4 170 57 5 160 50 6 150 44 }}} 역시 []를 사용할 수도 있다. {{{ > 신체검사[c(3,4)] }}} 두 가지를 모두 사용하는 것도 가능하다. 즉 조건에 맞는 행의 원하는 열만 보는 것이다. {{{ > subset(신체검사, 키 > 160, select=c(키,몸무게)) 키 몸무게 1 180 80 2 170 77 4 170 57 }}} ==== aggregate - 자료를 요약하기 ==== {{{ > 성적 이름 과목 학기 점수 1 철수 국어 1 80 2 철수 영어 1 70 3 철수 수학 1 65 4 영희 국어 1 90 5 영희 영어 1 80 6 영희 수학 1 70 7 철수 국어 2 90 8 철수 영어 2 50 9 철수 수학 2 80 10 영희 국어 2 60 11 영희 영어 2 50 12 영희 수학 2 85 }}} 전체 평균을 구하고 싶다면 단순히 mean 함수를 사용하면 된다. {{{ > mean(성적$점수) [1] 72.5 }}} 만약 전체 평균이 아니라 각 부분의 평균을 구하고 싶다면 어떻게 할까? 이럴 때 aggregate 함수를 사용한다. 학생별 평균을 구하는 경우 {{{ > aggregate(성적$점수, list(이름=성적$이름), mean) 이름 x 1 영희 72.5 2 철수 72.5 }}} 학생들의 학기별 평균을 구하는 경우 {{{ > aggregate(성적$점수, list(이름=성적$이름, 학기=성적$학기), mean) 이름 학기 x 1 영희 1 80.00000 2 철수 1 71.66667 3 영희 2 65.00000 4 철수 2 73.33333 }}} aggregate 함수의 기본 사용법은 다음과 같다. {{{ aggregate( 계산할 값, 자료를 여러 부분으로 나누는 기준, 계산할 함수) }}} 자료를 부분으로 나눌 때 위에서처럼 이름 따위를 직접 사용할 수도 있지만 어떤 조건을 걸 수도 있다. 예를 들어 학생들마다 85점 이상 점수를 맞은 과목의 수를 알고 싶다고 하자. {{{ > aggregate(성적$점수, list(이름=성적$이름, 성적우수= 성적$성적 > 85 ), length) 이름 성적우수 x 1 영희 FALSE 5 2 철수 FALSE 4 3 영희 TRUE 1 4 철수 TRUE 2 }}} aggregate에서 계산할 값에 벡터가 아니라 데이터프레임이 오면 모든 열에 대하여 함수를 적용한다. "신체검사.수치"는 앞의 절에서 만든 데이터프레임으로 키와 몸무게를 담고 있다. {{{ > aggregate(신체검사.수치, list(성별=신체검사$성별), mean) 성별 키 몸무게 1 남 170 74.00000 2 여 160 50.33333 }}} ==== 출처 ==== * http://www.remantu.com/r/tutorial/subset