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/
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
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"
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
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"
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
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
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
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"
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)
)
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
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:
vec[ … ] <- giá trị mới cần gán1 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