반응형
/*********************************************************************************************************
-- 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:3, 3) # 1~3 반복 3번 rep(1:3, each=3) # 1~3 각가 반복 3번 # -- 벡터 데이터 처리 함수 x = c(1, 3, 5) y = c(3, 5, 7, 9) 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 변수 데이터 삭제 # -- 특정 요소 출력 및 제외 a = 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 생성 m = matrix(c(1:5)) # 5x1 m m = matrix(c(1:9), nrow=3) # 3개의 행으로 만듦, 열 우선 채움 m 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:19, 2); 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()) x = 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() 적용 f = function(x){ x * c(1,2,3) } x apply(x,1,f) apply(x,2,f) # ******************************************** # -- Array # 동일 데이터 타입을 갖는 다차원 배열 # 잘 사용되지 않음 # ******************************************** d = 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 처리 함수 a = list(c(1:5)) b = list(6:10) a;b lapply(c(a,b), max) # list로 결과 반환 sapply(c(a,b), max) # vactor로 결과 반환(더 효과적이라 많이 씀) | cs |
반응형