Rscript không biết đang ở trong thư mục nào
getwd() - thư mục làm việc hiện tại
setwd() - cài thư mục làm việc mới (chỉ cần dùng với
Rscript)
dir() - file folder đang có trong thư mục làm
việc
getwd()
[1] "/Users/hoangkhanh/Library/CloudStorage/OneDrive-SciEco/RB-003/buoi_2"
dir()
[1] "Bài tập buổi 2" "buoi_2.nb.html" "Buổi_2.pptx"
[4] "buoi_2.Rmd" "dat2.dta" "Data_structure_2.R"
[7] "data.sav" "VN_GDP_2021.xlsx"
Toán tử khai báo biến <- ->
=
a <- 12
c = 13
10 -> b
a; b; c
[1] 12
[1] 10
[1] 13
Viết trong dấu ngoặc kép hoặc đơn
"đoạn text",'đoạn text thứ 2'
Các hàm cần nhớ
paste(str1, str2, sep = ''): nối các chuỗi làm
1
cat(str1, str2, sep = ''): in chuỗi được nối ra màn
hình
grep(pattern, x) và grepl(pattern, x):
kiểm tra kí tự có trong chuỗi hay không
sub(pattern, replacement, x) và
gsub(pattern, replacement, x): thay thế chuỗi được tìm bằng
chuỗi mới
Ví dụ:
paste('Hoàng', 'Văn', 'A', sep = ' ')
[1] "Hoàng Văn A"
cat('Hoàng', 'Văn', 'A', sep = ' ')
Hoàng Văn A
grep(pattern = 'Nam', x = 'Hoàng Văn Nam')
[1] 1
grep(pattern = 'Nam', x = 'Nguyễn Thị Hiền')
integer(0)
grepl(pattern = 'Nam', x = 'Hoàng Văn Nam')
[1] TRUE
grepl(pattern = 'Nam', x = 'Nguyễn Thị Hiền')
[1] FALSE
sub(pattern = '/', replacement = '-', x = '20/10/2022')
[1] "20-10/2022"
gsub(pattern = '/', replacement = '-', x = '20/10/2022')
[1] "20-10-2022"
a <- 1.5
print(a)
Gồm 2 kiểu:
double: số thực (mặc định khi tạo một số thì sẽ là kiểu double)
integer: số nguyên
Giá trị đặc biệt: Inf, -Inf,
NaN, pi
Toán tử số học: + - *
/ %% %/% ^
**
Toán tử so sánh:
> >= <
<= ==
| & !: or, and,
not
Hàm tính toán thông dụng:
log(10): \(\log_e10\) hay \(\ln(10)\)
log(n, base = x): \(\log_xn\)
log10(100): \(\log_{10}100\)
sqrt(10): \(\sqrt{10}\)
exp(10): \(e^{10}\)
cos(pi), sin(pi), …
Biến Logical : Biến chỉ có hai định dạng là TRUE hoặc FALSE
Giá trị đặc biệt: NA (được xem là missing value trong dữ liệu)
TRUE hoặc FALSE hay có thể viết tắt
T hoặc F
a <- T
b <- F
a; b
[1] TRUE
[1] FALSE
Biến integer: biến số nguyên (nguyên âm, nguyên dương)
a <- 1L
print(a)
class(a)
Biến complex: biến số phức gồm phần thực và phần ảo
c <- 10 + 5i
print(c)
class(c)
Biến raw: là kiểu định dạng mã hoá các biến
Hàm thường sử dụng
charToRaw() – Chuyển chuỗi về dạng raw
rawToChar() – Chuyển dạng raw về chuỗi
numToBits() – Chuyển dạng numeric về raw
intToBits() – Chuyển dạng integer về raw
Kiểu dữ liệu
class(): cho biết kiểu của dữ liệu đó
typeof(): cho biết kiểu của dữ liệu đó khi được lưu
vào bộ nhớ máy tính
class() và typeof() sẽ khác nhau rõ hơn khi dùng với
các cấu trúc dữ liệu khác như Data.frame hay Matrix, …
Kiểm tra
is.logical() – Kiểm tra có phải logical
không
is.numeric() – Kiểm tra có phải numeric
không
is.character() – Kiểm tra có phải character
không
is.integer() – Kiểm tra có phải integer
không
is.raw() – Kiểm tra có phải raw không
Chuyển đổi kiểu dữ liệu
as.logical() – Chuyển về dạng logical
as.integer() – Chuyển về dạng integer
as. numeric() – Chuyển về dạng numeric
as.character() – Chuyển về dạng character
Biến date: là biến có dữ liệu biểu thị cho 1 ngày
Ngoài ra còn có kiểu Date-time là biểu thị cho thời gian trong ngày (chi tiết hơn)
ISO 8601: quy chuẩn về trình bày ngày tháng (yyyy-mm-dd) Ví dụ: 2003-02-01
Các hàm thường dùng
as.Date(x, …)
as.Date.character(x, format, …): chuyển kiểu
character về date
as.Date.numeric(x, origin, …): chuyển kiểu numeric
về date
Sys.Date(): lấy ngày hiện tại trên máy
Sys.time(): lấy giờ hiện tại trên máy
Sys.timezone(): lấy timezone hiện tại trên
máy
Ví dụ
date <- as.Date('22/09/2022', format = '%d/%m/%Y')
print(date)
[1] "2022-09-22"
class(date)
[1] "Date"
typeof(date) # R hiểu nó là Date nhưng thực chất nó chỉ lưu một con số thực trên máy
[1] "double"
Cài đặt
x Đối tượng được truyền vào
format Định dạng ngày được nhập (kiểu
character)
origin Ngày làm gốc so sánh (kiểu numeric)
Cấu trúc dữ liệu: là cách các dữ liệu được sắp xếp một cách có cấu trúc.
Cấu tử: là các dữ liệu đơn lẻ trong cấu trúc dữ liệu lớn
Lập trình hướng đối tượng là một mẫu hình lập trình dựa trên khái niệm “công nghệ đối tượng”, mà trong đó, đối tượng chứa đựng các dữ liệu, trên các trường, thường được gọi là các thuộc tính; và mã nguồn, được tổ chức thành các phương thức.
R cũng là một ngôn ngữ hướng đối tượng, vì vậy có thể nói mọi thứ R trong R đều là một object (đối tượng) và được cung cấp các thuộc tính cũng như method riêng biệt
Mọi thứ trong R đều là một đối tượng (R Objects)
Do đó mọi thứ trong R đều sẽ có thể có các thuộc tính (attributes) đi kèm
Dạng cấu trức dữ liệu mà ở đây dữ liệu được sắp xếp vị trí theo thứ tự từ trái sang phải
Các công việc cần làm
Tạo vector (Create)
Truy cập (Access)
Chỉnh sửa (Modify)
Lưu ý khác với vector trong toán
dim(c(1, 2)) # null
NULL
Cú pháp: variable_name <- c(data1, data2, …)
x <- c(2,5,7,8,3)
x
[1] 2 5 7 8 3
Tạo nhanh một vector
Dùng cú pháp start:end hoặc dùng hàm
seq(start, end, by)
# Creating a sequence from 5 to 13.
v <- 5:13
print(v)
[1] 5 6 7 8 9 10 11 12 13
# Creating a sequence from 6.6 to 12.6.
v <- 6.6:12.6
print(v)
[1] 6.6 7.6 8.6 9.6 10.6 11.6 12.6
# If the final element specified does not belong to the sequence then it is discarded.
v <- 3.8:11.4
print(v)
[1] 3.8 4.8 5.8 6.8 7.8 8.8 9.8 10.8
seq(1, 3 , by = 0.2)
[1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0
seq(from = 1, to = 10, by = 2)
[1] 1 3 5 7 9
x
[1] 0 2 4 6 8 10
x[3] # truy cập phần tử thứ 3
[1] 4
x[c(2, 4)] # truy cập phần tử thứ 2 và 4
[1] 2 6
x[-1] # truy cập tất cả phần tử trừ phần tử đầu tiên
[1] 2 4 6 8 10
# Sử dụng vector chứa các phần tử là logical để truy cập
# Lấy phần tử đầu tiên
x[c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE)]
[1] 0
Hàm names()
# Tạo vector dt gồm 3 phần tử 20, 30, 25
# Đặt tên tương ứng với diện tích phòng ngủ, phòng khách, phòng bếp.
dt <- c(20, 30, 25)
names(dt) <- c("phòng ngủ", "phòng khách", "phòng bếp")
print(dt)
phòng ngủ phòng khách phòng bếp
20 30 25
# Cách 2: nhanh hơn
dt2 <- c("phòng ngủ"= 20, "phòng khách"= 30, "phòng bếp"= 25)
print(dt2)
phòng ngủ phòng khách phòng bếp
20 30 25
# Truy cập các phần tử
dt["phòng ngủ"]
phòng ngủ
20
Chỉnh sửa các phần tử
h2 <- c(-3,-2,-1) # tạo vector h2
h2
[1] -3 -2 -1
# sửa phần tử thứ 3 thành 1
h2[3] <- 1
h2
[1] -3 -2 1
Tính toán trên vector
x <- seq(10, 40, 10)
y <- 1:4
x; y
[1] 10 20 30 40
[1] 1 2 3 4
x + 1
[1] 11 21 31 41
x + y # lưu ý số lượng phần tử của x và y phải BẰNG nhau
[1] 11 22 33 44
So sánh các vector với điều kiện
x; y
[1] 10 20 30 40
[1] 1 2 3 4
x > y # tất cả phần tử của x đều lớn hơn y
[1] TRUE TRUE TRUE TRUE
x > 10 # phần tử đầu tiên không lớn hơn 10
[1] FALSE TRUE TRUE TRUE
# Lấy ra các phần tử lớn hơn 10 của x
x[x > 10]
[1] 20 30 40
sum(x) – tính tổng
mean(x) – tính trung bình
length(x) – đếm số lượng phần tử
median(x) – tính trung vị
quantile(x, probs) – tính phân vị
var(x) – tính phương sai
sd(x) – tính độ lệch chuẩn
cov(x) – tính hiệp phương sai
cor(x) – tính hệ số.tương quan
sort(x, …) – sắp xếp thứ tự
order(x, …) – sắp xếp thứ tự và trả về vị trí
mới
summary(x) – thống kê mô tả