+4

Thao tác cơ bản với khung dữ liệu trong R (phần 1)

Giới thiệu

R là một ngôn ngữ lập trình bậc cao, nó được tạo ra với mục đích dành cho các công việc phân tích dữ liệu, thống kê và học máy. Tôi gọi R là "Super Excel" và nó còn hơn thế nữa. Nếu bạn là người mới tìm hiểu về ngôn ngữ R, đây là bài dành cho bạn. Hãy bắt đầu với những thao tác dữ với dữ liệu cơ bản nhất.

Khởi tạo khung dữ liệu

khung dữ liệu (data frame) là một cấu trúc dữ liệu dạng bảng giống như excel.

Đầu tiên hãy tạo một khung dữ liệu (data frame) sau đó chúng ta sẽ thực hành trên khung dữ liệu này.


id <- c(1, 2, 3, 4, 5, 6)
name <- c('Hien', 'Thu', 'Hung', 'Ngoc', 'Duong', 'Xuyen')
gender <- c('F', 'F', 'M', 'F', 'M', 'F')
date_of_birth <- c('11/3/1998', '21/2/1998', '12/7/1998', '30/5/1998', '23/2/1997', '15/1/2999')
math <- c(8, 7.5, 8.6, 9.25, 6, 7)
literature <- c(9, 6, 4.9, 6.6, 7.1, 8)
english <- c(7, 7.4, 5.9, 8.2, 5.5, 9)

students <- data.frame(id, name, gender, date_of_birth, math, literature, english)

students # hiển thị dữ liệu

kết quả được khung dữ liệu có tên students:

image.png

Data frame có cấu trúc giống bảng tính gồm các quan sát (observation) và các biến (variable), ở đây tôi sẽ dùng thuật ngữ "quan sát" đại diện cho một dòng và "biến" đại diện cho cột.

trong R hàm hàm c() tạo ra một cấu trúc dữ liệu có tên là vector, bạn có thể tưởng tượng vector giống như mảng trong các ngôn ngữ lập trình khác như Java, C, C++...

Hàm data.frame() tạo ra một khung dữ liệu có các cột là các vector truyền vào.

! lưu ý:

Dấu "." trong hàm data.frame() không giống như các ngôn ngữ lập trình khác, nó đơn giản chỉ là một ký tự. Có thể tác giả của hàm đó đã đặt tên là data_frame() hoặc dataFrame() nhưng họ đã không làm vậy, và chúng ta đã có môt hàm với tên gọi data.frame().

Thao tác với khung dữ liệu

Tạo ra biến mới trong khung dữ liệu

Bạn có thể tạo ra một vector từ các vector khác và toán tử

mean_score <- (math + literature + english) / 3
mean_score 
# kết quả là: 8.000000 6.966667 6.466667 8.016667 6.200000 8.000000

Hoặc nếu có sẵn dữ liệu trong data frame, bạn có thể thao tác giữa các biến

mean_score <- (students$math + students$literature + students$english) / 3
mean_score 
# kết quả là: 8.000000 6.966667 6.466667 8.016667 6.200000 8.000000

Hoặc bạn có thể vừa thao tác với dữ liệu và tạo ra biến mới trong data frame

students$mean_score <- (students$math + students$literature + students$english) / 3
students # hiển thị dữ liệu

image.png

Thay đổi giá trị trong khung dữ liệu

Ồ bạn Xuyen sinh ngày '15/1/2999', có vẻ đó là ngày '15/1/1999', chúng ta nên đặt lại giá trị cho dữ liệu này

students$date_of_birth[students$name=='Xuyen'] <- '15/1/1999'

Hãy tạo ra thêm một biến học lực

students$academi[students$mean_score >= 8] <- 'Gioi'
students$academi[students$mean_score < 8 & students$mean_score >= 6] <- 'Kha'
students$academi[students$mean_score < 6] <- 'TB va Yeu'

students

image.png

Tôi có thể viết lại đoạn code trên bằng cách khác (hơi nâng cao xíu, bạn có thể tham khảo hoặc không).

within(students, {
  academi <- NA
  academi[students$mean_score >= 8] <- 'Gioi'
  academi[students$mean_score < 8 & students$mean_score >= 6] <- 'Kha'
  academi[students$mean_score < 6] <- 'TB va Yeu'
})

students

Kiểu dữ liệu ngày tháng

có vẻ dữ liệu trong biến date_of_birth của chúng ta không phải kiểu dữ liệu date, nó đang được lưu dưới dạng chuỗi (string), điều đó có thể không tốt lắm cho sau này. Nếu chúng ta thường xuyên thao tác với biến date_of_birth, ta nên chuyển nó sang định dạng kiểu dữ liệu date. Điều đó thực hiện bằng câu lệnh dưới đây:

students$date_of_birth <- as.Date(students$date_of_birth, '%d/%m/%Y')

students

image.png

Hãy cùng tìm hiểu rõ hơn R chuyển đổi định dạng sang kiểu dữ liệu date như thế nào.
Định dạng mặc định của kiểu dữ liệu date là "yyyy-mm-dd", ví dụ R sẽ hiểu được câu lệnh sau:

as.Date('2022-04-18')

Tuy nhiên nếu định dạng khác (ví dụ như trong dữ liệu của chúng ta) ta phải giải trình cho R hiểu bằng cách truyền vào định dạng trong hàm as.Date() ví dụ:

as.Date('18/4/2022', '%d/%m/%Y')

hoặc

as.Date('18-4-22', '%d-%m-%y')

Các định dạng ngày tháng được quy định trong bảng sau:

Cú pháp Ý nghĩa Ví dụ
%d Ngày (từ 1 đến 31) 31
%a Thứ trong tuần (viết tắt) Mon
%A Thứ trong tuần Monday
%m Tháng (từ 1 đến 12 12
%b Tên của tháng (viết tắt Jun
%B Tên của tháng June
%y Năm (hai số cuối) 09
%Y Năm (bốn số) 2009




Các hàm cơ bản khác với khung dữ liệu: with(), names(), is.na(), na.omit()


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.