1. VECTOR LÀ GÌ??

Vecto là một mảng động (Dynamic aarray) - tức là một danh sách có thể thay đổi thứ tự kích thước khi thêm hoặc xóa phần tử.

Tính chất của một vector

Tính chất Mô tả
Tự mở rộng Khi thêm phần tử, vector tự tăng kích thước
Truy cập nhanh Truy cập phần tử qua chỉ số (index) rất nhanh như mảng
Hỗ trợ thao tác tiện lợi Có hàm push_back(), pop_back(), insert(), erase()
Có thể chứa bất kỳ kiểu dữ liệu Như int, float, string, hoặc cả kiểu do người dùng định nghĩa (class)

2. TẠO VECTOR VỚI C()

Lưu ý: R bắt đầu đánh số từ 0.

# Vecto số
vec_num <- c(2,4,10,15,20,27)
print(vec_num)
## [1]  2  4 10 15 20 27
# Vecto chữ 
vec_char <- c("hi", "i", "am", "Gốt", "Hi i am Gốt")
print(vec_char)
## [1] "hi"          "i"           "am"          "Gốt"         "Hi i am Gốt"
# Vecto logic
vec_logical <- c(TRUE,FALSE,FALSE,TRUE)
print(vec_logical)
## [1]  TRUE FALSE FALSE  TRUE

3. CHỈ SỐ VÀ TRUY CẬP PHẦN TỬ

# Lấy ra phần tử thứ 1
vec_char[1]
## [1] "hi"
# Lấy ra phần tử thứ 3 đến 5
vec_num[c(3,5)]
## [1] 10 20
# Lấy tất cả phần tử
print(vec_char)
## [1] "hi"          "i"           "am"          "Gốt"         "Hi i am Gốt"
# Lấy tất cả trừ phần tử thứ 3
vec_logical[-3]
## [1]  TRUE FALSE  TRUE

4. CÁC PHÉP TOÁN VỚI VECTOR

4.1 NUMBERIC (SỐ HỌC)

Có thể thực hiện đầy đủ các phép toán học

a <- c(1,2,4,6,8)
b <- c(27,12,2,0,4)
# Cộng từng phần tử
a+b
## [1] 28 14  6  6 12
# Trừ từng phần tử
a-b
## [1] -26 -10   2   6   4
# Chia từng phần tử
a/b
## [1] 0.03703704 0.16666667 2.00000000        Inf 2.00000000

4.2 LOGICAL (TRUE/FALSE)

Hỗ trợ toán logic, lọc dữ liệu

c <- c(TRUE,FALSE,TRUE)
d <- c(TRUE, FALSE, FALSE)

# Phép AND
c & d
## [1]  TRUE FALSE FALSE

Giải thích kết quả:

  • True & True -> True (giống nhau )

  • False & False -> False (giống nhau)

  • True & False -> False (khác nhay nên sai -> False)

c <- c(TRUE,FALSE,TRUE)
d <- c(TRUE, FALSE, FALSE)

# Phép OR 
c|d
## [1]  TRUE FALSE  TRUE

Giải thích kết quả:

  • True & True -> True (giống nhau )

  • False & False -> False (giống nhau)

  • True & False -> True (cho kết quả TRUE nếu ít nhất một bên TRUE)

c <- c(TRUE,FALSE,TRUE)

# NOT 
!c
## [1] FALSE  TRUE FALSE

Giải thích kết quả: xuất ra kết quả không phải là c.

4.3 CHARACTER (CHUỖI)

Không áp dụng phép toán số học, nhưng dùng được một số thao tác đặc trưng.

vec_char <- c("hi", "i", "am", "Gốt")

# Ghép lại thành chuỗi
paste(vec_char, collapse = " ") 
## [1] "hi i am Gốt"
vec_char <- c("hi", "i", "am", "Gốt")

# In hoa
toupper(vec_char)  
## [1] "HI"  "I"   "AM"  "GỐT"

4.4 FACTOR (DANH MỤC)

Không hỗ trợ phép toán số học, nhưng có thể so sánh.

e <- factor(c("cao", "thấp", "thấp", "cao", "trung bình"))

e == "cao"
## [1]  TRUE FALSE FALSE  TRUE FALSE

Giải thích kết quả: kết quả sẽ so sánh các phần tử trong e với chữ “cao” nếu giống sẽ là TRUE, ngược lại là FALSE.

5. LOGICAL INDEXING (LỌC ĐIỀU KIỆN)

tuoi <- c(1, 15, 30, 55, 80)

# Lấy các phần tử lớn hơn 18
tuoi[tuoi > 18]
## [1] 30 55 80
tuoi <- c(1, 15, 30, 55, 80)

# Vị trí thỏa điều kiện
which(tuoi > 18)
## [1] 3 4 5

BÀI TẬP MINI

  1. Tạo một vector gồm 7 số nguyên bất kỳ.
so_nguyen <- c(-10, 0, 1, 9, 30, 49, 11)
  1. Trích ra phần tử thứ 2 và 6.
so_nguyen[c(2,6)]
## [1]  0 49
  1. Tính tổng, trung bình và độ lệch chuẩn (dùng sum(), mean(), sd()).
print(sum(so_nguyen))
## [1] 90
print(mean(so_nguyen))
## [1] 12.85714
print(sd(so_nguyen))
## [1] 20.19429
  1. Lọc các số > trung bình.
so_nguyen[so_nguyen>mean(so_nguyen)]
## [1] 30 49