[Development Record::R] 3. Vector


ベクトル


:同じデータ型の値を1列にするデータ構造

✍🏻データ構造

#        |    1차원   |    2차원   |   다차원   |
#------------------------------------------------
# 단일형 |    벡터    |    행렬    |    배열    |
# 다중형 |   리스트   |데이터프레임| 

# 주로 사용되는 데이터 구조는 단일형 1차원안 벡터와 다중형의 2차원 구조인 데이터프레임이다.

▶同じタイプの1次元構造

x1 <- 10      # 단일 데이터, 스칼라 변수
x2 <- 1:10    # 연속 데이터, 

▶c():combine関数

# c() : combine, 여러 벡터를 연결하여 하나의 긴 벡터를 만드는 함수
x3 <- c(1:10)                     # 1씩 증가
X4 <- c(10, 20, 30, 40, 50)       # 숫자 벡터 데이터
x5 <- c("John", "Mary", "Peter")  # 문자 벡터 데이터
x6 <- c("A", 10, 5.5)             # 문자 벡터 데이터
class(x6)                         # character

x7 <- c(1, 2, 3, c(4, 5), c(6, 7, 8)) # 숫자 벡터 데이터
class(x7)                         # numeric
length(x7)                        # 데이터의 길이 확인, 8

▶seq():シーケンス関数

# seq() : sequence, 연속된 값을 갖는 벡터를 만드는 함수
x8 <- seq(1, 10)                  # 1씩 증가, 1:10와 같음
x9 <- seq(1, 10, 2)               # 1부터 10까지 2씩 증가
x10 <- seq(from=1, to=10, by=2)   # 1부터 10까지 2씩 증가

# 1:10, c(1:10), seq(1,10), seq(1:10)은 같은 결과

▶rep():repeat関数

x11 <- rep(1, 10)                 # 1이 10번 반복
x12 <- rep(1, times=10)           # 1이 10번 반복, times 생략
x13 <- rep("ABC", 5)              # "ABC"가 5번 반복
x14 <- rep(c("A", "B", "C"), 5)   # "A", "B", "C"가 5번 반복
x15 <- rep(1:4, times=3)          # 1~4를 3번 반복
x16 <- rep(1:4, each=3)           # 1~4를 각각 3번 반복
x17 <- rep(1:4, length.out=10)    # 1~4를 반복하여 10개만 저장

▶論理:論理ベクトルデータ

# logical : TRUE, FALSE 값만을 가지는 데이터
# TRUE: T, FALSE: F
x18 <- c(TRUE, FALSE, TRUE, FALSE)  # 논리 벡터 데이터
x19 <- c(T, F, T, F)                # 논리 벡터 데이터(축약)

# 두 개의 논리 벡터 데이터를 비교할 때는 갯수가 일치해야 한다.
x20 <- c(3, 3, 1)
x21 <- c(1, 3, 2)          # 두 객체의 길이가 서로 배수 관계에 있어야한다.
x20 > x21                  # TRUE FALSE FALSE
x22 <- c(1, 3, 2, 4)
x20 > x22                  # 두 객체의 길이가 서로 배수관계에 있지 않습니다
x23 <- c(1, 3, 2, 1, 3, 2)
x20 > x23                  # TRUE FALSE FALSE  TRUE FALSE FALSE

📝 ベクトル使用例

# A학급 학생 7명의 키를 측정한 데이터
v1 <- c(180, 168, 172, 155, 190, 175, 185)
mean(v1)  
# 평균
< 벡터 데이터를 다루는 방법 >

# 1. 인덱스로 선택하는 방법
v1[4]                       # 4번을 선택
v1[2:5]                     # 2~5번 선택
v1[c(2, 4, 5)]              # 2, 4, 5번 선택
v1[c(2, 4, 6)]              # 2, 4, 6번 선택
v1[seq(2,6,2)]              # 2, 4, 6번 선택

# 2. 해당 인덱스를 제외하고 선택
v1[-3]                      # 3번 제외하고 모두 선택
v1[c(-3, -5, -7)]           # 3, 5, 7번 제외하고 선택
v1[-c(3, 5, 7)]             # 3, 5, 7번 제외하고 선택
v1[2:-5]                    # 2~5번까지를 제외하고 선택
v1[-c(2:5)]                 # 2~5번까지를 제외하고 선택


# 문제) A학급에서 3번, 5번 학생의 데이터를 삭제하고 저장하시오.
v1 <- v1[-c(3, 5)]
v1 <- v1[c(-3, -5)]

# 벡터에 이름을 붙여서 저장하는 방법
v2 <- c(Park=180,Kim=168, Lee=172, Han=155, Kang=190, Jung=175, Choi=185)

# 3. 이름 인덱스를 통해서 선택
v2[3]
v2["Kim"]
v2[c("Kim", "Han", "Jung")]
v2[-"Kim"]                  # 에러 : -는 숫자 인덱스에만 사용 가능, 이름 인덱스는 사용 불가

# 4. 논리값을 선택
v2[v2 >= 180]               # 180이상인 값만 선택
v2[v2 >= 170  & v2<180]     # 170이상이고 180미만인 값만 선택

▶ベクトルデータの並べ替え方法

# 오름차순 정렬 : 작은 값부터 큰 값으로 나열하는 방법
# 내림차순 정렬 : 큰 값부터 작은 값으로 나열하는 방법

sort(v2)
sort(v2, decreasing=TRUE)   # 내림차순

# 문제) v2 벡터를 내림차순으로 정렬하여 v3에 저장하시오.
v3 <- sort(v2, decreasing = T)
v3 

# 변수를 생성하고, 바로 실행(출력)하는 방법
# 문제 v2벡터를 오름차순으로 정렬하여 v4에 저장하시오.
(v4 <- sort(v2))              # 저장하고 실행
v5 <- sort(v2); v5            # 저장하고 실행