일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #Ajax #EL #JSTL
- #자바 #파일 #함수
- #자바 #입출력 #함수
- #Web #웹 #jsp #servlet
- #오라클 #자바 #연동
- #돔 트리 #form 태그 #이스케이프문자 #시작태그 #form태그
- #자바 #오라클 #연동
- #웹 #HTTP 프로토콜
- #함수 #VIEW #시퀀스 #INDEX
- #제약 조건 #함수 #컬럼 변경 #테이블 변경& 삭제
- #BigDecimal
- #리뷰 #CSS #선택자
- #48일차 #한 내용 #요약
- #jdbc #자바
- #스윙 #함수 #Swing
- #오라클 #용어 정리 #데이터 타입 #비교 연산자 #논리 연산자 #SELECT 문
- #HTML4.01또는 5의 차이 #parsing #웹브라우저 #form 태그 #태그 속성 #id #name
- #웹 #중요한 것
- #StringBuffer #자바 #
- #오라클 #함수 #MAX() #MIN() #LPAD() #SUBSTR() #TO_CHAR() #복사 #지우기 #수정
- #자바 #스윙관련 함수 #API보고 정리했음
- #프로그래밍 기초
- #함수 #키워드 #조인 #서브쿼리
- #웹 #정의 #5대 브라우저 #
- #스프링 프레임 워크 #인코딩 #컨텍스트 #환경설정
- #오라클 #계정 생성 #테이블 #생성 #조회 #추가
- #자바
- #자바 #입출력
- #자바 #오라클 #JDBC
- #오라클 #11g #테이블
- Today
- Total
IT journey
R-벡터,행렬 본문
직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :)
벡터
벡터에 데이터 추가(스칼라 및 벡터들의 결합)
(1) Combine 함수 c()
x<-c(1,2)
y<-c(6,7,8)
c(x,y)
(2) 함수 append()는 추가되는 스칼라 혹은 벡터의 위치의 조절하여 삽입이 가능합니다.
x<-c(1,2)
y<-c(5,6)
append(x,y)
append(x,y,after=1)
일정한 수열을 갖는 벡터 만들기
(1) 콜론(:)으로 생성하기
a:b 로 하게 되면 a를 시작점으로 b를 초과하지 않을 때까지 1씩 증가하는 수열을 되고,
a>b이면 1씩 감소하는 수열이 됩니다.
1:10
5:0
(2) 함수 seq() 로 수열 자료 생성하기
연속된 값으로 벡터를 초기화합니다.
seq(from=0,to=6) #seq(0,6)
seq(from=0,to=6,by=2) #seq(0,6,by=2)
seq(from=0,to=6,length=2) #seq(0,6,len=2) #length 수만큼 나옵니다.
seq(from=0,by=2,length=2) #seq(0,by=2,len=2)
#한 숫자로만 구성할 경우에는 1을 기준으로 1씩 증가하거나 감소합니다.
seq(5)
seq(-5)
참고로, 함수 seq_along() 또는 seq_len()를 사용하게 되면
- 함수에 들어가는 벡터와 길이가 같으며 시작을 1로 하며 1씩 증가하는 수열이 생성됩니다.
#selt_along은 길이만큼의 값으로 벡터를 초기화합니다.
x <-c(2,4,6,8,10,12)
seq(along=x)
seq_along(x)
seq(length=length(x))
seq_len(length(x))
- 날짜 함수에 대해 먼저 알아본 뒤 seq()를 이용한 예를 알아봅시다.
날짜 함수는 시간 흐름에 따라 데이터를 얻을 경우 중요한 변수입니다.
문자형 벡터에 함수 as.Date()를 적용한 것으로 문자형 벡터의 디폴트 형태는 yyy-mm-dd입니다.
x<-as.Date(c("2020-06-03","2020-06-12"))
x
#유형은 숫자형으로 1970년 1월 1일부터의 날수 입니다.
typeof(x) #타입을 알아보는 함수입니다.
typeof(x)
x[2]-x[1]
#seq()를 적용한 예를 알아봅시다.
#동일한 간격의 날짜 생성하려면 옵션에 by를 넣으면 됩니다.
x1<-as.Date("2021-06-03")
x2<-as.Date("2021-06-30")
seq(from=x1,to=x2,by=12)
#간격을 주간격 혹은 월간격 또는 연 단위로 조절이 가능합니다.
x1<-as.Date("2021-06-03")
x2<-as.Date("2021-06-30")
seq(from=x1,by="week",length=12)
seq(from=x1,by="month",length=12)
seq(from=x1,by="year",length=12)
(3) 일정한 패턴을 갖고 있는 함수 rep()
rep 함수는 특정 값으로 지정된 횟수만큼 반복해서 벡터를 초기화합니다.
- rep()과 옵션 times의 활용한 예를 살펴봅시다.
rep(6,times=6)
rep(1:5,times=2)
rep(c("J","I"),times=c(3,2))
times에 하나의 숫자를 지정하게 되면 데이터 전체를 숫자만큼 반복하지만,
times에 벡터를 지정하게 되면 반복 대상 데이터와 일대일 대응시켜서 반복합니다.
- rep()과 옵션 each와 times의 활용한 예를 살펴봅시다.
#데이터 요소가 each번 반복합니다.
rep(4:6,each=2)
#데이터 요소가 each번 반복 전체로 times번 반복합니다.
rep(4:6,each=2,times=4)
- 옵션 each와 length의 활용한 예를 살펴봅시다.
#길이 length가 될 때까지 데이터 전체가 반복됩니다.
rep(4:10,each=2,length=4)
벡터의 연산
- 벡터와 벡터의 연산은 대응되는 각 구성요소끼리의 연산으로 이루어집니다.
x<-c(5,6,7,8)
y<-c(9,5,2,6)
x
x+3 #x의 요소들 각각에 3을 더해줍니다.
y/2 #y의 요소들 각각에 2를 나누어줍니다.
2^x #x의 요소들 각각을 2의 거듭제곱 계산 합니다.
- 벡터의 연산 시 나올 수 있는 문자 : -Inf, Inf, NaN
c(-2,0,1)/0
sqrt(-5)
Inf-Inf
Inf/Inf
- 벡터의 순환법칙
c(1,2,3,4,5)+c(1,2)
1:5+1:2
길이가 짧은 c(1,2)를 순환반복해서 c(1,2,1,2,1)을 만든 뒤 c(1,2,3,4,5)와 연산을 합니다.
벡터와 스칼라의 연산에서도 이와 같은 순환법칙이 사용됩니다.또한 다양한 함수에서 순환법칙이 적용됩니다.
다양한 함수
함수를 들어가기 전 간단한 연산하는 예를 보겠습니다.
2+3 #더하기
2-3 #빼기
2*3 #곱하기
6/4 #나누기
6%/%4 #몫
6%%4 #나머지
2^3 #지수
pi #파이
연산자들 간의 우선순위
^(지수) -> : 콜론 연산자 -> %any% 특별 연산자 -> * 곱하기 / 나누기
->+ 더하기 - 빼기 -> == != < > <= >= 비교 연산자 -> & && 논리 연산자 AND
-> | || 논리 연산자 OR
참고로, 특별연산자를 알아봅시다.
- %%는 나머지 연산자를 말합니다.
- %/%는 몫을 구할 때 쓰는 연산자 입니다.
- %*%는 행렬의 곱하기 연산자입니다.
- %in%는 데이터에 특정 값의 포함여부 확인하는 연산자입니다.
○ 수학계산함수에 대해 알아봅시다.
abs() | 절대값 나오는 함수입니다. |
sqrt() | 제곱근 계산하는 함수입니다. |
ceiling() | 숫자보다 작지 않은 가장 작은 정수입니다. 만약 4.567이면 5가 나오며, -4.567이면 -4가 나옵니다. |
floor() | 숫자보다 크지 않은 가장 큰 정수나오는 함수입니다. 만약 4.567이면 4가 나오며, -4.567이면 -5가 나옵니다. |
trunc() | 소수점 이하를 버리는 함수입니다. 만약 4.567이면 4가 나옵니다. |
round() | 반올림하는 함수입니다. 만약 round(4.567,2)처럼 입력하게 되면 그것은 4.567에서 2자리로 반올림하는 것이며, 4.57이 나옵니다. |
signif() | 유효수로 반올림하는 함수입니다. 만약 signif(0.004567,2)로 입력하게 되면 그것은 0.0046이 나옵니다. |
exp() | 지수함수입니다. exp(5)처럼 입력가능합니다. |
sin() | 삼각함수입니다. sin(2)처럼 입력이 가능합니다. |
asin(sin()) | 역삼각함수입니다. asin(sin(2)) 이런식으로 입력이 가능합니다. |
log() | 로그입니다. log(2,base=5) 처럼 입력하게 되면 진수는 2, 밑은 5인 로그입니다. |
log() | 자연로그입니다. log(5) 처럼 입력이 가능합니다. |
log10() | 상용로그입니다. log10(1) 처럼 입력이 가능합니다. |
exp(log(5)) | 지수함수.자연로그의 역함수입니다. exp(log(5))처럼 입력시,5로 나옵니다. |
○ 통계계산함수
참고로, 함수를 돌려보고 싶을 때에는 x<-c(15,8,7,5,2) 먼저 놓고 돌려보면 됩니다.
mean() | 평균을 구할 수 있습니다. |
median() |
중앙값을 구할 수 있습니다. 참고로, 중앙값을 구하고자하는 요소가 짝수개이면 그 두개의 요소를 더한뒤 2로 나누어줍니다 |
참고로, mean과 median의 차이가 크면 쏠린게 존재하다고 생각하면 됩니다.
var() | 분산을 구할 수 있습니다. |
sd() |
표준편차를 구할 수 있습니다. |
IQR() |
Inter-Quartile Range(사분범위)를 구할 수 있습니다. |
range() |
범위를 구할 수 있습니다. |
sum() |
합을 구할 수 있습니다. |
min() |
최소값을 구할 수 있습니다. |
max() |
최대값을 구할 수 있습니다. |
diff() |
각 요소들의 간의 차이를 각각 구하여 반환해줍니다. |
○문자함수
함수 | 기능 | ||
nchar(x) | 문자열 x의 구성하는 문자의 개수을 알려주는 함수입니다. | ||
paste(...,sep="") | 빈칸 없이 문자열들의 결합을 보여주는 함수입니다. |
||
paste0() | |||
substr(x,start,stop) | 문자열의 일부분 선택을 보여주는 함수입니다. start,stop에는 정수형 스칼라 또는 벡터 (대응되는 숫자끼리 시작점과 끝점 구성) |
||
toupper(x) | 영문자 대문자로 변환하는 함수입니다. | ||
tolower(x) | 영문자 소문자로 변환하는 함수입니다. | ||
strsplit(x,split) | 문자열의 분리하는 함수입니다. | ||
sub(old,new,x) | 문자열의 치환하는 함수로, 문자열의 첫번째 old만 new로 치환합니다. |
||
gsub(old,new,x) | 문자열 치환하는 함수로, 문자열의 모든 old로 new로 치환합니다. |
문자함수에 대한 예는 아래와 같습니다.
#nchar()함수의 예
x<-c("IT","journey")
nchar(x)
#paste() 함수의 예
paste("IT","journey","의",sqrt(400),"포스팅입니다")
paste("IT","journey","의",sqrt(400),"포스팅입니다",sep=',')
paste("Step",1:2,sep=" ")
paste0("Step",1:2)
#collapse : 문자형 벡터와 문자열을 하나로 결합하는 옵션
letters[6:10] #영소문자
LETTERS[1:5] #영대문자
paste0(LETTERS,collapse=".")
#strsplit()의 예
x<-c("IT","journey","sj")
(y<-strsplit(x,","))
unlist(y)
#substr()의 예
substr("IT journey",1,5)
x<-c("IT","journey","sj")
substr(x,c(1,2),c(4,6))
#toupper()와 tolower()의 예
x<-c("IT","journey","sj")
x<-toupper(x)
x
x<-tolower(x)
x
#벡터 x의 첫글자만 대문자로 변화시킬려면
substr(x,1,1)<-toupper(substr(x,1,1))
x
#sub(old,new,x)과 gsub(old,new,x)의 예
x<-"Never say Never"
sub("Never","No",x)
gsub("Never","No",x)
x <-"2021.06.03"
gsub('\\.', '-', x)
#문자열을 분리해봅시다.
unlist(strsplit("IT journey",split=""))
#주의해야할 사항은
#점(.)을 기준으로 문자로 분리하고 싶을 경우는 위에서와 같이 \\. 나 [.]을 써야합니다.
○벡터 연산
setqual() |
두 벡터가 같은 집합인지 알려주는 함수입니다. | ||
setdiff() | 차집합 함수입니다. | ||
intersect() | 교집합 함수입니다. | ||
union() | 합집합 함수입니다. | ||
identical() | 객체가 동일한지 알려주는 함수입니다. |
벡터 연산의 예는 아래와 같습니다.
identical(c(1,5),c(5,6))
1 %in% c(1,5,46,7) #1,5,46,7 안에 1이 있는가?
union(c(1,5,46,8),c(5,6,7))
intersect(c(1,5,46,8),c(5,6,7))
setdiff(c(1,5,46,8),c(5,6,7))
벡터의 비교연산
관계연산자를 다루었던 Python - 자료형 (숫자형,문자열,불린형) 과 C언어-연산자 그리고
논리연산자를 다루었던 Python-자료형(리스트,튜플) 과 C언어-연산자 를 봐주시고 오신다면 수월하게 아래내용을 이해할 수 있습니다.
#벡터끼리 비교연산한 예
x<-c(6,12,10)
y<-c(31,12,4)
x>y
x>=y
x<y
x<=y
x==y
x!=y
#벡터와 스칼라의 비교연산한 예
x<-6:12
x>8
x<8
x<=7|x<=12
x<=8&x>=6
#각 요소끼리의 비교가 아닌 전체로 비교를 할 때는 any(),all()를 씁니다.
x<-5:12
any(x>=8)
all(x<5)
x<-5:12
sum(x>=8) #벡터의 구성요소 중 특정조건을 만족하는 요소의 개수를 구할 때
mean(x>=8) #벡터의 구성요소 중 특정조건을 만족하는 비율을 구하기를 원할 때
벡터의 인덱싱
인덱싱을 들어가기 전 R은 몇부터 세는지 꼭 되새김질 하셔야 합니다.
혹여 생각이 나지 않으시다면 R-데이터 유형과 객체 간략히 살펴보기 를 다시 봐주시길 부탁드립니다.
이제 본론으로 돌아가 벡터의 인덱싱에 대해서 알아보겠습니다.
이것 역시 아까 보신 글에서 보셨을테지만 두 가지로 나누어 다시 한 번 더 정리해보겠습니다.
① 대괄호 색인 직접 지정 하는 방법으로 양수로 색인을 지정하게 되면 해당요소를 선택하고,
음수 색인을 지정하게 되면 해당요소를 제외하고 선택합니다.
② 논리형 벡터에 의한 색인 지정하는 방법으로 TRUE가 있는 위치의 자료를 선택하며, 이것은 벡터가 비교에 의한 자료 선택에서 쓰입니다.
이에 대한 예 또한 아까 보신 글에서 봐주시길 부탁드립니다.
참고로, 문자열 인덱싱을 한 예는 아래에서 살펴봅시다.
x<-c("Star, Sr","Anna, Aa")
x<-strsplit(x,",")
c(x[[1]][2],x[[2]][1])
unlist(x)[c(2,3)]
행렬
(1) 생성하는 방법
R-데이터 유형과 객체 간략히 살펴보기 에서 보신 분들을 생성하는 방법을 기억하고 계실꺼라 생각듭니다.
기억이 안나셔도 좋습니다. 바로 아래에 한가지 방법을 더 추가해 3가지로 정리해볼테니 이번에 더욱 집중해서 봐주시면 됩니다.
㉮함수 cbind()를 쓰게 되면 벡터들을 열 단위로 묶어 행렬을 생성하고,
함수 rbind()를 쓰게 되면 벡터들을 행 단위로 묶어 행렬을 생성합니다.
㉯행렬 matrix()를 이용하여 행과 열의 개수 nrow= 또는 ncol= 로 지정합니다.
지정하게 되면 자료는 열 기준으로 입력하기 때문에, 자료를 행 단위로 입력하기를 원한다면 옵션인 byrow=TRUE를 추가해야 합니다. byrow=FALSE로 하게 되면 열 기준으로 입력합니다.
㉰함수 dim()을 이용하면 됩니다.
참고로, 행과 열, 차원들의 이름을 붙이는 방법과 인덱싱 하는 방법은 R-데이터 유형과 객체 간략히 살펴보기에서 봐주시길 바랍니다.
x<-cbind(letters[1:4],c(1:4))
y<-rbind(letters[1:4],c(1:4))
#기존 행렬에 열과 행 추가해봅시다.
x<-cbind(letters[1:4],c(1:4))
y<-rbind(letters[1:4],c(1:4))
cbind(x,5:6)
x1<-1:2
x2<-3:6
x3<-7
rbind(x1,x2,x3) #길이가 달라 순환법칙이 적용되었다는 것을 알 수 있습니다.
(2) 행렬의 연산
행렬과 행렬 연산과 행렬과 스칼라 연산으로 나누어집니다.
연산자 및 함수 | 기능 |
+ - * / ^ | 행렬을 구성하는 숫자 각각에 적용 |
A %*%B | 행렬 A와 행렬 B의 곱하기 |
cbind(A,B,...) | 행렬이나 벡터를 열 단위로 결합 |
colMeans(A) | 행렬 A 각 열의 평균값으로 구성된 벡터 |
crossprod(A) | t(A)%*%A(ATA) |
crospprod(A,B) | t(A)%/%(ATB) |
colSums(A) | 행렬 A의 각 열의 합으로 구성된 벡터 |
diag(A) diag(x) diag(k) |
행렬 A의 대각선 원소로 구성된 벡터 벡터 x의 대각선 원소로 하는 대각행렬 k*k 단위행렬 |
eigen(A) | 행렬 A의 고유값과 고유벡터로 구성된 리스트 |
rbind(A,B,...) | 행렬이나 벡터를 행 단위로 결합 |
rowMeans(A) rowSums(A) |
행렬 A 각 행의 평균값으로 구성된 벡터 행렬 A의 각 행의 합으로 구성된 벡터 |
solve(A) solve(A,b) |
행렬 A의 역행렬 연립방정식 Ax=b의 해 |
t(A) | A의 전치(AT)행렬 |
tcrossprod(A) tcrossprod(A,B) |
A%*%t(A) A%*%t(B) |
dim() | 차원 수 구함, 차원 수 지정 |
apply() | apply(행렬,1,함수) #행 단위로 행렬에 함수 적용 apply(행렬,2,함수) #열 단위로 행렬에 함수 적용 |
간략히 계산이 어떻게 이루어지는지 알아봅시다. 사실 R이 다 계산해줄 것이기에, 계산방법을 모르고 넘어가도 좋습니다. 하지만 행과 열에 대한 것은 확실히 알고가면 좋습니다. 혹시 행과 열에 대한 것과 계산방법과 대해 알고싶다면 이어 글을 읽어주시고, 사용한 예를 보고싶다면 ctrl+F를 눌러 '사용한 예는 아래와 같습니다.'를 기입하여 바로 봐주시길 부탁드립니다.
○계산하는 방법을 알기 전에, 일단 행과 열에 대해 정리해봅시다.
2행 2열 행렬이 있다고 치면 이런식으로 이름지어집니다.
그럼 아래 A 행렬의 1행 1열은 1이 되는 것 입니다.
○행렬 A와 행렬 B의 곱하기(행렬의 곱)
조건이 있다면, A의 행의 개수와 B의 열의 개수가 맞아야 계산이 가능합니다.
계산하는 방법은 A 행렬의 1행 1열 곱하기 B 행렬의 1행 1열 더하기 A 행렬의 1행 2열 곱하기 B 행렬의 2행 1열를 하여서 1행 1열을 구하면 됩니다. 이렇게 2행 2열까지 구하면 계산이 됩니다.
○전치행렬
전치행렬을 구할 때는 아래와 같이 T를 행렬 위에 붙여줍니다.
전치행렬을 구하게 되면 행은 열로, 열은 행으로 바뀌게 됩니다.
그러고 나면 결과는 아래와 같이 됩니다.
○고유값과 고유벡터
고유값을 구할 때는 아래와 같이 구하면 됩니다.
고유벡터를 구할 때는 아래와 같이 구하면 됩니다.
○차원의 수
열공간의 차원으로 보게 되면 저 빨간색 표시처럼 보게 됩니다.
그것이 (1,4,5) 한 묶음과 (2,3,6) 한 묶음해서 총 2개로 표시될 수 있습니다.
행 공간의 차원으로 보게 되면 (1,2) 한 묶음과 (4,3) 한 묶음과 (5,6) 한 묶음해서 총 3개로 표시될 수 있습니다.
사용한 예는 아래와 같습니다.
A<-matrix(c(1:6),nrow=2)
A+1
A-1
8-A
A/2
A+A
A-A
A/A
A*A
B=matrix(c(7:12),nrow=3)
A%*%B
colMeans(A)
t(A)
crossprod(A)
C=matrix(c(7:12),nrow=2)
crossprod(A,C)
colSums(A)
diag(A)
x=c(1,2,3,4)
diag(x)
diag(2)
D=matrix(c(1:4),ncol=2)
eigen(D)
rowMeans(A)
rowSums(A)
solve(D)
b<-c(1,4)
solve(D,b)
tcrossprod(D)
E=matrix(c(5:8),nrow=2)
tcrossprod(D,E)
dim(A)
nrow(A)
ncol(A)
A<-matrix(c(1:6),nrow=2)
A
apply(A,1,sum)
apply(A,2,sum)
#rowMeans()와 같은 함수는 apply() 보다는 자유도가 떨어집니다.
아래 발행 글
'개인공부공간 > R' 카테고리의 다른 글
R-데이터 프레임 (4) | 2021.06.04 |
---|---|
R-데이터 유형과 객체 간략히 살펴보기 (16) | 2021.06.02 |