월요일
벡터 인덱스 네이밍
- 벡터 인덱스 네이밍
1 2 3 4 5 6
vec <- vector() vec <- 1:10 vec2 <- c("abc", "def") vec3 <- c(T,F,T,F) names(vec2) <- c("first","second") vec2["first"]
벡터의 인덱스에 이름을 부여할 수 있다. 인덱스에 이름이 부여되면 파이썬처럼 텍스트 인덱스를 쓸 수 있다.
Matrix(행렬)
Matrix (행렬)
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
x1 <- matrix(1:20,nrow=5,ncol=2,byrow=T) x2 <- matrix(1:10,5,2,byrow = F) print(x1) print(x2) cbind(x1,x2) rbind(x1,x2) A <- matrix(1:12,4,3) rownames(A) <- c(paste0("n", 1:4)) colnames(A) <- c(paste0("x", 1:3)) print(A) A[1,] A[,2] A[,-3] B <- matrix(1,4,3) A + B a <- matrix(1:6,2,3); b <- matrix(1,3,2) a%*%b A <- matrix(1:4,2,2) solve(A) A <- matrix(1:12,4,3) t(A) A <- matrix(1:9,3,3) sum(diag(A)) A <- matrix(1:4,2,2) det(A) eigen(A)$values
matrix()
를 활용하면 행렬을 만들 수가 있다.이때 중요한 옵션은 byrow옵션이다. byrow의 default값은 FALSE이다. byrow가 TRUE인 경우는 행렬 데이터를 채울 때 행을 우선으로 채우고 FALSE인 경우 열을 우선으로 채우게 된다.
cbind(); rbind()
는 두 행렬을 어떤 기준으로 이어 붙이는지를 결정해 준다.cbind()
는 앞의 행렬에 뒤 행렬을 행기준으로 열을 붙이고rbind()
는 앞의 행렬에 뒤 행렬을 열기준으로 행을 붙인다.rownames
와colnames
를 활용하면 행과 열에 이름을 부여할 수 있다.인덱스를 정확한 좌표로 기록하지 않고 A[1,]과 같이 입력하면 해당 데이터의 1행을 모두 출력해준다. 이때 인덱스에 -가 들어가면 해당 열, 혹은 행을 제외하고 출력해주는 명령어가 된다.
기본 행렬 연산을 모두 지원한다. 간단한 행렬 합과 곱을 모두 지원하는데 당연하게 합, 곱 연산시의 기본 조건은 지켜야한다.
A%*%B
는 두 행렬의 곱연산을 나타내는데, 이때 반드시 지켜야하는 조건은 ‘앞의 열수 = 뒤의 행수’이다. 만약 단순하게A*B
를 하면 두 행렬의 원소별 곱을 지원하기도 한다.solve()
는 역행렬을 반환해준다.t()
는 행렬의 transpose(전치)를 반환해준다.diag()
를 활용하면 대각행렬을 만들 수 있다. 함수 내부에 어떤 값이 들어가냐에따라 역할이 달라진다.- 숫자 -> n x n 단위행렬
- 벡터 -> 해당 벡터가 대각성분인 대각행렬
- 행렬 -> 해당 행렬의 대각성분 반환
det()
를 활용하면 행렬의 determinant를 알려준다.eigen()
을 활용하면 eigen value혹은 eigen vector를 알 수 있기때문에 행렬의 고유값과 고유벡터를 알 수 있다. $연산자를 활용해서 values와 vectors를 각각 반환 가능하다.
list
- list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
lst1 = list(a = 1:10, b =matrix(1:4,2,2)) lst2 <- list() lst2[[1]] <- matrix(1:10,5,2) lst2[[2]] <- lst1 lst1$a lst1$b lst1[1] lst1[[1]] lst2[[1]] lst2[[1]][3] lst1[[2]] lst1[2] lst2[2] lst2[1] lst2[[2]][[1]]
R에서 다양한 데이터를 한꺼번에 담을 수 있는 가장 포괄적 객체이다. 모든 객체를 담을 수 있으며 동시에 다양한 type으로 담을 수 있다. 변수 이름을 부여해서 데이터를 관리할 수도 있으며 데이터 저장인덱스를 불러올 수도 있다.
목요일
factor type
- factor type
1 2 3 4 5 6 7
grade <- c("A", "A", "B", "C", "B", "B") f.grade <- factor(grade) f2.grade <- factor(grade, order = T) lev <- c("C", "B", "A") f3.grade <- factor(grade, levels = lev, order = T) levels(f2.grade) levels(f3.grade)
범주형 자료분석에 유용한 객체이다. 보통 명목형, 순서형자료에 사용한다.
level을 가지고 있기때문에 순서를 구분이 가능하다.
factor생성할 때, order이 T인 경우 순서형, F인 경우 명목형으로 저장한다.
얼핏 보면 벡터와 굉장히 유사한 것을 알 수 있지만 factor는 지정된 인덱스를 벗어난 값은 접근이 불가능하다.
data.frame
- data.frame
1 2 3 4 5 6 7
x1 = 1:4; x2 <- c("kim","lee","jung","park") dat = data.frame(x1,x2) dat2 = data.frame(num=x1, name=x2) dat3 = data.frame(x1,x2,stringsAsFactors = F) dat[1]; dat[2] dat[[1]]; dat[[2]]
data.frame은 행렬과 리스트가 합쳐진 것이라 생각하면 편하다.
- 데이터프레임에 저장할 변수는 길이가 동일해야한다. 다르면 계속해서 에러가 난다.
- 조심해야하는 점이 한 가지 있다. 숫자를 다루게 될 경우 문자와 섞이게 되거나, 문자로 적힌 숫자인 경우에는 문자로 인식해서 factor타입으로 변형을 시키게되는데, 이때 이 값으로 연산을 하면 값으로 계산을 하는 게 아니라 factor에 있는 level로 계산을 하게 된다. 이를 막기 위해서 stringsAsFactors = F를 이용하면 막을 수 있다.
array
- array
1 2
x1 <- array(1:24,dim=c(4,3,2)) x2 <- array(1:32, dim=c(2,2,4,2))
n차원의 데이터 저장방법이다. 행렬과 유사한 형태이다. dim을 통해서 n x m과 높이, 반복수 등을 정할 수 있다. 정확하게 말하면 반복보다는 차원의 개수를 지정해준다. 3차원 직육면체 큐브를 몇개 만들 것인가 지정해준다고 생각하면 편하다. 위의 코드로 예시를 들면 (상상해시길)
1번 코드는 1~24를 저장하는 행렬을 배열로 만든다. 이때, 행렬의 기본 형식을 4x3이고 큐브의 층은 2층이다.
2번 코드는 1~32를 저장하는 행렬을 배열로 만든다. 행렬의 기본 형식은 2x2이고 층수는 4개이다. 이런 직육면체 큐브를 2개를 만들면 된다.
apply
- apply
1 2 3 4
x_mat <- matrix(rnorm(100),20,5) x_mat apply(x_mat,2,mean) apply(x_mat,1,sum)
apply는 반복문의 사용을 극도로 줄여준다. 1을 사용하면 모든 행, 2를 사용하면 모든 열에 함수를 적용시킨다.
Comments powered by Disqus.