카테고리 없음

[R 스튜디오] 벡터

datahaseo 2025. 3. 11. 23:28

1. 벡터

-벡터는 한 개 이상의 원소를 구성한 자료 구조

-R 의 자료 객체 중 가장 기본이 되는 자료 개체

-하나의 벡터 원소는 한 가지 형태(mode) 만 가능

- c() scan() seq() rep() 함수로 생성 가능 

 

1.1c()

c(1,2,3,4,5)

c(1:5) 

 

*세미콜론 ; 은 여러 명령을 한번에 실행할 때 쓰이고, 그냥 콜론은 일종의 수열 연산

x <- 10; y <- 20; z <- x + y; print(z)   >> 30이 출력

 

*c() 함수 안에는 문자형 벡터도 만들 수 있어! 다만 이때는 각 원소에 "" 를 넣어줘야해

a<-c("a","b","c","d","e")

 

*벡터의 길이, 즉 원소의 갯수를 세는 함수는 length()

 

 

 

 

*c() 함수를 이용하여 논리형 벡터도 생성 가능

c(F,F,T)

 

 

 

 

*위에서 하나의 벡터에 하나의 데이터 형식만 사용되는 것처럼 데이터 형식이 혼용되어 쓰이진 않음

 

 

2.seq() 함수

seq(3,9,2)

3부터 시작해서 9까지 2를 간격으로! 

 

seq(from=3,to=9,by=2)   ...이 함수 결과랑 같은 결과고, 각 옵션의 순서는 바뀌어도 무방

 

 

 

 

q<-seq(from =3 ,to = 9 ,length = 2)   

q(3,15)

 

length 는 원소의 갯수를 나타내니까, 3에서 9까지의 숫자를 총 2개가 되도록 만드는 것

 

 

 

 

q<-seq(from =5,to = 100 ,length =20)
q

 

5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100

 

 

 

seq(from=5,by=100,along=1:10)

 

5부터 시작되어서 100 씩 커지고, 그걸 1 ~ 100 번 반복

 

 

 

seq(from=5,by=100,along=5:10) 로 하면

  5 105 205 305 405 505

 

 

 

seq(from = 1 , to= 10 ,along = 1:5)

1부터 시작되어서 10까지 5개로 배분해서 

 1.00  3.25  5.50  7.75 10.00

 

 

 

 

 

 

 

3.rep()

 

rep(a,times=b)  > a 를 b 만큼 반복!

 

rep(c(1,2),times=2)

1 2 1 2

 

rep(1:2,times=2)

1 2 1 2 

 

rep(c(2,4),times = c(2,1))   times = c(a,b)   앞의 원소는 2회, 뒤의 원소는 1회 반복

2 2 4 

 

rep(c(2,4,5), times = c(2,1,3))

2 2 4 5 5 5 

 

 

rep(c(2,4) , each=2) 앞 뒤 원소 모두 2회 반복 

2 2 4 4

 

rep(c(2,4,8), length =5 ) 2 4 8 로 구성된 벡터를 반복하되 생성되는 벡터 크기를 5로 한정

2 4 8 2 4

 

 

 

<벡터의 편집>

c() scan() seq() rep() 등으로 생성된 벡터는 추가로 가공할 수도 있음

 

 

[ ]  : 벡터의 일부 원소 추출    ---벡터이름 [원소번호 또는 조건문 , ...]

replace  : 일부 자료 대체       ---replace(벡터,원소 번호, 교체자료)

append : 조건에 따른 위치에 자료 삽입 ---sort(벡터 , decreasing = FALSE, ...)

sort : 자료 정렬  ---sort(벡터,decreasing = FALSE, ...)

rank : 자료의 순위 출력 ----rank (벡터 , na.last = TRUE ,ties.methond = c("average" , "first","random","max","min"))

order : 오름차순에 의한 자료의 위치값 출력 ---order(벡터,na.last = TRUE, decreasing =FALSE)

 

 

<옵션>

1. na.last = TRUE  만약 결측치가 존재하면 가장 맨 끝에 위치하는 것으로 간주

2. decreasing =FALSE 기본 옵션이 내림차순이 아니라 오름차순

 

 

 

 

1. [ ]로 특정 순서의 원소 추출


v1<-c(11:20)
v1
v1[c(3,5)]

v1 에 있는 3번쨰, 5번쨰 추출 

11 12 13 14 15 16 ,,,,20

 

 

 

 

 

 

 

-v1 벡터 안에서 15 보다 큰 값 추출

v1[v1>15]

16 17 18 19 20 

 

 

-특정 순서의 원소를 제거하고 출력

 v1 [c(-2,-4)]   >> 12 랑 14가 빠짐

11 13 15 16 17 18 19 20

 

 

 

2. replace()


v2<-c(1:5)
v2
replace(v2,2,6)

결과: 1 6 3 4 5

 

 

 

3. append() 

append(a,b,after=x)

 

a 라는 벡터에서 x 번쨰 뒤의 숫자에 b 추가

 

 

3을 세번 반복하고 3에서 7까지 2만큼의 증가분으로 수열을 생성하고

이어서 rev() 함수를 이용해 3애소 7까지 이르는 크기 3인 벡터의 역순을 구해 연결한 뒤 4를 세번 반복한 벡터

 

 

x<-c(rep(3,3),seq(3,7,2),rev(seq(from=3,to=7,length=3)),repx(4,3))

 

x

3 3 3 3 5 7 7 5 3 4 4 4



sort(x) 

3 3 3 3 3 4 4 4 5 5 7 7


rank(x)

1 2 3 4 5 | 6 7 8 | 9 10 | 11 12

 

3 5개에 대한 중심 순위값 3.0

4 3개에 대한 중심 순위값 7.0

6 2개에 대한 중심 순위값 (9+10)/2 9.5

7 2개에 대한 중심 순위값 (11+12)/2 11.5

 

 

 3.0  3.0  3.0  3.0  9.5 11.5 11.5  9.5  3.0  7.0  7.0  7.0

 

 

 

order (x)

1 2 3 4 9 10 11 12 5 8 6 7 

 

*rank() 는 sort () 처리한 후의 랭킹 순위라면

order 는 오름차순 상관 없이 그 벡트 원래의 오름차순 순서임 !!