Cài đặt R

Cài đặt Rstudio

Phần mềm giao diện để hỗ trợ sử dụng R

Lưu ý: trong máy có R thì mới sử dụng được Rstudio

Link cài đặt: https://posit.co/download/rstudio-desktop/


1. Khai báo biến


Toán tử khai báo biến <-->=

Lưu ý: không dùng kí tự đặc biệt (+-*/), chỉ dùng . _ con số, tên biến chỉ được bắt đầu bằng chữ hoặc dấu .


Tạo biến my_text chứa đoạn text “Hello World”:

my_text <- "Hello world"


Tạo biến my_num chứa giá trị số:

my_num <- 1234


Tính toán với biến my_num

my_num + 1000
## [1] 2234


2. Kiểu dữ liệu


2.1. Kiểu Character

class(my_text)
## [1] "character"
ten <- "A"
ho <- "Nguyễn Văn"
paste(ho, ten)
## [1] "Nguyễn Văn A"
paste0(ho, ten)
## [1] "Nguyễn VănA"
ten2 <- gsub("A", "B", "Nguyễn Văn A")
ten2
## [1] "Nguyễn Văn B"


2.2. Kiểu Numeric

class(my_num)
## [1] "numeric"

Toán tử số học:

  • +, -, *, /,

  • ^, **: số mũ

  • %%: chia lấy dư (5 %% 2 = 1)

  • %/%: chia lấy phần nguyên (5 %/% 2 -> 2)

  • %*%: nhân 2 ma trận

5^2
## [1] 25
5 %% 2
## [1] 1
5 %/% 2
## [1] 2

Toán tử so sánh:

  • >, >=, <, <=

  • ==: so sánh bằng nhau (không dùng =)

  • !=: khác

  • !(điều kiện): not

  • (điều kiện 1) & (điều kiện 2): và

  • (điều kiện 1) | (điều kiện 2): hoặc

my_num
## [1] 1234
my_num == 100
## [1] FALSE
(1000 <= my_num) & (my_num <= 2000)
## [1] TRUE

Con số đặc biệt

pi
## [1] 3.141593
Inf
## [1] Inf
exp(1)
## [1] 2.718282
# loga nepe
log(100)
## [1] 4.60517
log(100, base = 10)
## [1] 2
sqrt(100)
## [1] 10


2.3. Kiểu date

date_text_iso <- "2023-07-05"
date1 <- as.Date(date_text_iso) 
# chuyển kiểu char sang Date
date1
## [1] "2023-07-05"
class(date1)
## [1] "Date"
date_text <- "05-07-2023"
date2 <- as.Date(date_text, format = "%d-%m-%Y")
date2
## [1] "2023-07-05"
class(date2)
## [1] "Date"


2.4. Làm việc với đa kiểu dữ liệu

Sử dụng as. khi muốn chuyển đổi kiểu dữ liệu

Sử dụng is. khi muốn kiểu tra biến thuộc kiểu gì

is.numeric(my_num)
## [1] TRUE
as.numeric("1000")
## [1] 1000

3. Bài tập thực hành

Câu 1:

default_value <- 5000 # tiền gốc
r <- 0.005 # lãi suất hàng tháng
t <- 4 # 4 năm
tien_lai <- default_value * r * 12 * t
cat("Lãi nhận được sau", t, "năm là", tien_lai)
## Lãi nhận được sau 4 năm là 1200

Câu 2:

default_value <- 10000 # tiền gốc
r <- 0.045 # lãi suất hàng năm
t <- 5 # 5 năm
tien_lai <- default_value*(1 + r)^t - default_value
cat("Lãi nhận được sau", t, "năm là", round(tien_lai, 2))
## Lãi nhận được sau 5 năm là 2461.82

Cấu trúc dữ liệu trong R

1. Vector:

  • Dữ liệu được lưu thành 1 dãy các giá trị từ trái sang phải, ví dụ c(1, 2, 3) hay c("a", "b", "c")

  • Lưu ý: Các phần tử cùng 1 kiểu dữ liệu

my_vec <- c(1, 2, 3)
my_vec
## [1] 1 2 3
my_vec2 <- c("a", 123, TRUE) # tự động ép thành character
my_vec2
## [1] "a"    "123"  "TRUE"


2. Dataframe

  • Dữ liệu dạng bảng, gồm nhiều cột và nhiều dòng

  • Mỗi cột của Dataframe là 1 vector (tức trong 1 dataframe là có nhiều vector tương ứng với số cột trong bảng)

data.frame(
  x = c("a", "b"),
  y = c(1, 2)
)


Nhập file data vào R

File excel: dùng package readxl, writexl

Lưu ý nếu chưa cài gói trên thì cần phải chạy lệnh install.packages("<TÊN GÓI>") để cài (chỉ cần cài 1 lần)

Với mỗi phiên làm việc mới, cần dùng lệnh library(<TÊN GÓI>) để có thể bắt đầu sử dụng gói, nếu không sẽ gặp lỗi không tìm thấy hàm có trong gói

# install.packages("readxl")
# install.packages("writexl")
library(readxl)
library(writexl)
df_excel <- read_excel("data/data.xlsx")
df_excel


File csv: dùng hàm read.csv()

df_csv <- read.csv("data/application_sample.csv")
head(df_csv)


File spss và stata: sử dụng gói haven

library(haven)
df_spss <- read_spss("data/data.sav")
df_stata <- read_stata("data/data.dta")
head(df_stata)


File google sheet (gói googlesheets4)

library(googlesheets4)
df_sheet <- read_sheet("https://docs.google.com/spreadsheets/d/1y9T1An_2I4V0hpvJKNToqBMk_8yxKYO_5W6llgK_-WY/edit?usp=sharing")
## ! Using an auto-discovered, cached token.
##   To suppress this message, modify your code or options to clearly consent to
##   the use of a cached token.
##   See gargle's "Non-interactive auth" vignette for more details:
##   <https://gargle.r-lib.org/articles/non-interactive-auth.html>
## ℹ The googlesheets4 package is using a cached token for
##   'hoangdangkhanh12c1@gmail.com'.
## ✔ Reading from "data".
## ✔ Range 'Sheet1'.
df_sheet


Lưu ý: sau khi chạy lệnh read_sheet

  • Ấn 1 (yes) để chọn đăng nhập mới

  • Đăng nhập bằng gmail

  • Ấn tick để cấp quyền đọc và ghi file googlesheet


3. Thao tác trên Vector

df_excel
# lấy cột trong bảng (vector)
df_excel$khu_vuc
## [1] "Nông nghiệp" "Công nghiệp" "Dịch vụ"
df_excel$q2
## [1] "12.61" "38.41" "40.14"


Trích phần tử trong vector

df_excel$q2[1]
## [1] "12.61"
df_excel$q2[2]
## [1] "38.41"
df_excel$q3
## [1] "12.15" "37.61" "41.13"
df_excel$q3[c(1, 3)]
## [1] "12.15" "41.13"
df_excel$q3[c(TRUE, FALSE, TRUE)]
## [1] "12.15" "41.13"
df_excel$q2[-2] # bỏ đi phần tử thứ 2
## [1] "12.61" "40.14"


Chỉnh sửa dữ liệu

# đổi cột q1 đến q4 sang số
df_excel$q1 <- as.numeric(df_excel$q1)
df_excel$q2 <- as.numeric(df_excel$q2)
df_excel$q3 <- as.numeric(df_excel$q3)
df_excel$q4 <- as.numeric(df_excel$q4)
df_excel
df_excel$q1[1] <- 500
df_excel$q1
## [1] 500.00  36.45  42.20
df_excel
df_excel$q1[-1] <- 50
df_excel


Tính toán trên vector

df_excel$q1 <- df_excel$q1 + 100
df_excel
# chia các ô trong cột q3 cho 100
df_excel$q3 <- df_excel$q3 / 100
df_excel
df_excel$q2[df_excel$q2 > 20] 
## [1] 38.41 40.14
# lọc ra nhữg ô có giá trị trên 20
df_excel$q2[df_excel$q2 > 20] <- 50
df_excel

Tóm tắt (khi thao tác trên vector)

Trích xuất dữ liệu:

  • Sử dụng ngoặc vuông vec[ … ]

  • Với là con số: vị trí của ô muốn lấy

  • Với là vector: vị trí của nhiều ô muốn lấy

  • Với là điều kiện: trả về ô thoả mãn điều kiện

Thay đổi dữ liệu:

  • Gán với giá trị mới vec[ … ] <- giá trị mới cần gán


4. Thao tác trên DataFrame

  • 1 dataframe có nhiều cột, mỗi cột là 1 vector

  • Trích xuất dữ liệu trong dataframe:

    • data[<Dòng>, <Cột>]
df_excel
# lấy giá trị ở ô dòng thứ 2 cột thứ 3
df_excel[2, 3]
# thay đổi giá trị ở tại ô đó thành 500 
df_excel[2, 3] <- 500
df_excel
# lấy 2 dòng đầu 2 cột đầu
df_excel[c(1, 2), c(1, 2)] 
# Lọc ra dòng có q1 > 500
df_excel[df_excel$q1 > 500, ]


Tóm tắt (thao tác với dataframe):

  • Trích xuất dữ liệu: data[<DÒNG>, <CỘT>]

  • <DÒNG>:

    • 1 con số: lấy ra dòng bất kì

    • 1 vector: chứa vị trí các dòng cần lấy

    • 1 điều kiện

  • <CỘT>:

    • 1 con số, 1 vector: lấy ra cột cần lấy

    • 1 character, vector character chứa tên các cột

  • Thay đổi giá trị: gán tương tự như vector