반응형
/*********************************************************************************************************
-- Title : [R3.3] Dataframe - 병합 및 그룹핑 통계(패키지 활용)
-- Reference : hrd-net
-- Key word : R 데이터프레임 dataframe data frame 데이터 프레임 merge 조인 join tapply ddply 병합
그룹핑 groupby data.frame plyr
*********************************************************************************************************/
-- R
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | # ******************************************** # -- 데이터프레임 결합(merge) # 칼럼 값으로 기준으로 두 개의 프레임 연결 # ******************************************** df_height = data.frame(id=c(1,2,3), h=c(180,175,99)) df_weight = data.frame(id=c(1,2,4), w=c(80,75,88)) df_height; df_weight df_user = merge(height, weight, by.x="id", by.y="id") df_user class(df_user) # ******************************************** # -- plyr 패키지 활용 - 데이터 조인 # ******************************************** install.packages('plyr') library(plyr) # 패키지 로딩 # -- 병합할 데이터프레임 셋 만들기 x = data.frame(ID = c(1,2,3,4,5), height = c(160,171,173,162,165)) y = data.frame(ID = c(5,4,1,3,2), weight = c(55,73,60,57,80)) x; y # -- join() : plyr패키지 제공 함수 z = join(x, y, by='ID') # ID컬럼으로 조인 z x = data.frame(ID = c(1,2,3,4,6), height = c(160,171,173,162,180)) y = data.frame(ID = c(5,4,1,3,7), weight = c(55,73,60,57,80)) # -- inner/outer/full 조인 z = join(x,y,by='ID') # ID컬럼으로 left 조인(왼쪽 변수 기준) z z = join(x,y,by='ID', type='inner') # type='inner' : 값이 있는 것만 조인 z z = join(x,y,by='ID', type='full') # type='full' : 모든 항목 조인 z # -- 여러 값으로 병합하기 x = data.frame(key1 = c(1,1,2,2,3), key2 = c('a','b','c','d','e'), val1 = c(10,20,30,40,50)) y = data.frame(key1 = c(3,2,2,1,1), key2 = c('e','d','c','b','a'), val2 = c(500,400,300,200,100)) x;y join(x, y, by=c('key1', 'key2')) # ******************************************** # -- tapply() - 그룹별 통계 구하기 # 형식) tapply(적용data, 집단변수, 함수) # 집단변수 = 범주형 변수 (ex: gender) # DB에서 group by를 통한 통계 함수 사용과 유사 # ******************************************** head(iris) iris$Sepal.Width # -- 꽃의 종류와 종류별 건수 구하기 table(iris$Species) # -- 꽃의 종류별(Species) 꽃받침 길이 평균 구하기 tapply(iris$Sepal.Length, iris$Species, mean) # -- 꽃의 종류별(Species) 꽃받침 길이 합계 tapply(iris$Sepal.Width, iris$Species, sum) # ******************************************** # -- ddply() - 그룹별 여러 통계 구하기 # plyr 패키지 제공 함수 # 형식) ddply(dataframe, .(집단변수), 요약집계, 컬럼명=함수(변수)) # ******************************************** # 꽃의 종류별(Species)로 꽃받침 길이(Sepal.Length)의 평균 계산 a = ddply(iris, .(Species), summarise, avg = mean(Sepal.Length), tot = sum(Sepal.Length), var = var(Sepal.Length)) a | cs |
반응형