반응형

/*********************************************************************************************************
-- Title : [R3.3] Vector, Matrix, Array, List 자료 구조 및 Apply함수
-- Reference : hrd-net
-- Key word : r 벡터 매트릭스 배열 vector matrix array seq rep setdiff intersect names colnames rbind cbind ncol nrow apply
                  list 리스트 lapply sapply
*********************************************************************************************************/

-- 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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
   
# ********************************************
# -- Vector 자료 구조
#    동일한 타입을 갖는 1차원 배열 구
#    파이썬의 리스트와 유사
# ********************************************
 
# -- 벡터 데이터 생성 함수
c(1:20)                 # 1~20
seq(1,10,2)             # db sequence와 동일
rep(1:33)             # 1~3 반복 3번 
rep(1:3, each=3)        # 1~3 각가 반복 3번 
 
# -- 벡터 데이터 처리 함수
= c(135
= c(3579)
x;y
 
union(x,y)              # 합집합
setdiff(x, y)           # 차집합
setdiff(y, x)
intersect(x, y)         # 교집합      
 
 
# -- 벡터 변수에 저장
v1 = c(33,-5,20:23,12,-2:3)
v2 = c("홍길동""이순신""유관순")
v3 = c(T, TRUE, FALSE, T, TRUE,F,T)
v1;v2;v3
 
v4 = c(33,-5,20:23,12,"4")   # 모든게 모두 문자화(벡터는 동일 타입만 허용)
v4
 
# -- 같은 줄에 명령문 중복사용(;)
v1; mode(v1) 
v2; mode(v2)
v3; mode(v3)
 
# -- 벡터에 컬럼명 지정(names())
age = c(10,20,30)
age
 
names(age) = c("홍길동""이순신""강감찬")    # 컬럼명 지정 
age
 
# -- 벡터 삭제 
age =NULL               # age 변수 데이터 삭제
 
# -- 특정 요소 출력 및 제외
= c(1:50)
a
a[10]
a[10 : 45]              # 10~45
 
 
# -- 벡터 개수 출력(length())
length(a)
 
a[10 : (length(a)-5)] # 10~45
a[1,2]                  # error : 이 경우 행렬을 의미 
 
 
# ********************************************
# -- Matrix 자료 구조 
#   동일 데이터 타입을 갖는 2차원 배열
#   생성함수 : rbind():행묶음, cbind():컬럼 묶음, apply() : 함수적용
# ********************************************
 
# -- c()함수 이용 matrix 생성
= matrix(c(1:5))                          # 5x1
m
 
= matrix(c(1:9), nrow=3)                  # 3개의 행으로 만듦, 열 우선 채움
m
 
= matrix(c(1:10), nrow=2, byrow=T)        # byrow=T : 행 우선으로 채움  
m
 
# -- rbind()/cbind() 함수 이용      
x1 = c(5,40,50:52); x1
x2 = c(30,5,6:8); x2
 
mr = rbind(x1,x2); mr                       # 행 우선으로
mc = cbind(x1,x2); mc                       # 컬럼 우선으로
 
# -- matrix()함수 이용
m3 = matrix(10:192); m3                   # 10개 데이터를 2행으로 생성
 
# -- 자료와 객체 Type 보기
mode(m3); class(m3)                         # numeric, matrix
 
# -- matrix 데이터 접근 : [첨자,첨자] 이용
m3[1,]                                      # 1행 전체
mc[,2]                                      # 2열 전체
m3[2,3]                                     # 2행 3열의 데이터 1개 -> 15
m3[1, c(2:5)]                               # 1행에서 2~5열 데이터 4개
 
mc
mc[c(2:4), c(1:2)]
 
# -- matrix 데이터 처리 함수(length(), ncol(), nrow())
= matrix(c(1:9), nrow=3, ncol=3# 3행 3열 matrix 객체
x
 
length(x)                                   # 데이터 개수 
ncol(x); nrow(x)                            # 열/행 수
 
# -- matrix에 컬럼이름 적용하기(colnames())
colnames(x) = c("one""two""three")   
x
 
# ----------------------------------------
# -- Matrix 연산(apply(변수, 행/열, 함수))
# ----------------------------------------
apply(x,1,max)                              # 행 단위 최대값
apply(x,1,min)                              # 행 단위 최대값
apply(x,2,mean)                             # 열 단위 평균값
 
# -- 사용자 함수와 apply() 적용
= function(x){
  x * c(1,2,3)
}
 
x
apply(x,1,f)
apply(x,2,f)
 
 
# ********************************************
# -- Array
#    동일 데이터 타입을 갖는 다차원 배열
#    잘 사용되지 않음
# ********************************************
 
= c(1:12# 12개 벡터 객체 생성
d
 
arr = array(d, c(3,2,2)) # 3행2열2면 -> 3차원 배열 객체 생성
arr
 
# -- 배열 조회
arr[,,1#1면 
arr[,,2#2면 
 
# -- 배열 자료형과 자료구조 
mode(arr); class(arr) #numeric, array
 
 
# -- 데이터셋 샘플
iris   # 2차원
iris3  # 3차원 
 
 
# ********************************************
# -- List 자료 구조 
#    성격이 다른 데이터(벡터, 행렬, 데이터프레임 등 모든 데이터)
#    파이썬(딕셔너리와 유사) : d <= {'key':'value'} < =json
#    R : data.frame <= List('key'='value') <= json
# ********************************************
 
# -- 1개의 원소를 갖는 리스트
list = list("lee","이순신",95,"hong","홍길동",85)
list
 
# -- list 구조 제거 => 벡터로 변경
unlist = unlist(list) 
unlist
 
# -- 2개 이상의 원소를 갖는 리스트
num = list(c(1:5), c(6:10))
num
 
# -- key, value형태로 저장      
num2 = list(first=c(1:5), second=c(6:10))
num2
 
# -- 데이터 접근 
num2$first
num2$first[3]
num2$second
 
# -- key, value 형태로 저장
member = list(name="hong",age = 35,address="한양",gender="남자")
member
 
# -- list 원소 수정/추가 - 변수$키
member$age = 45  
member$id  = "hong"
member$pwd = "1234"      
member
 
# -- list 원소 제거 
member$age = NULL
member
 
# -- list의 데이터와 객체 타입 보기
mode(list); class(list) # list, list
 
length(member) # 6 -> 리스트 수
 
# -- list data 처리 함수
= list(c(1:5))
= list(6:10)    
a;b
 
lapply(c(a,b), max)  # list로 결과 반환
sapply(c(a,b), max)  # vactor로 결과 반환(더 효과적이라 많이 씀)
 

cs

반응형

+ Recent posts