반응형

/*********************************************************************************************************
-- 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)                                         # 패키지 로딩
 
# -- 병합할 데이터프레임 셋 만들기
= data.frame(ID = c(1,2,3,4,5), height = c(160,171,173,162,165))
= data.frame(ID = c(5,4,1,3,2), weight = c(55,73,60,57,80))
x; y
 
# -- join() : plyr패키지 제공 함수
= join(x, y, by='ID'# ID컬럼으로 조인
z
 
= data.frame(ID = c(1,2,3,4,6), height = c(160,171,173,162,180))
= data.frame(ID = c(5,4,1,3,7), weight = c(55,73,60,57,80))
 
# -- inner/outer/full 조인
= join(x,y,by='ID')                                 # ID컬럼으로 left 조인(왼쪽 변수 기준)
z
 
= join(x,y,by='ID', type='inner')                   # type='inner' : 값이 있는 것만 조인
z
 
= join(x,y,by='ID', type='full')                    # type='full' : 모든 항목 조인
z
 
# -- 여러 값으로 병합하기
= data.frame(key1 = c(1,1,2,2,3), 
               key2 = c('a','b','c','d','e'),
               val1 = c(10,20,30,40,50))
= 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)의 평균 계산
= ddply(iris, .(Species), summarise, 
          avg = mean(Sepal.Length),
          tot = sum(Sepal.Length),
          var = var(Sepal.Length))
a
 
 
 

cs

반응형

+ Recent posts