Tài liệu R
Tài liệu tham khảo R ngắn gọn, đi kèm ví dụ. Đọc khái niệm, xem code, rồi luyện tập trong một hành trình Coddy.
Bắt đầu
- R là gì?Ngôn ngữ lập trình R là gì, ra đời từ đâu, dùng để làm gì và so với Python ra sao, kèm đoạn code R đầu tiên bạn có thể chạy ngay.
- Cài đặt RCách tải R từ CRAN và cài đặt trên Windows, macOS hoặc Linux, cùng với RStudio, IDE mà gần như ai cũng dùng để viết R.
- Chạy script RMọi cách chạy code R: console tương tác, Rscript từ dòng lệnh, source() ngay trong R, và hai lệnh Run, Source trong RStudio.
- Cú pháp RPhần cốt lõi của cú pháp R: phép gán với <-, biểu thức và tự động in kết quả, gọi hàm với đối số có tên, và quy tắc mọi thứ đều là vector.
- Chú thíchCách chú thích hoạt động trong R: ký hiệu #, vì sao R không có chú thích nhiều dòng thật sự, phím tắt RStudio để comment cả khối, và một chú thích tốt nên nói gì.
Biến và dữ liệu
- BiếnCách tạo biến trong R bằng mũi tên <-, khi nào bắt buộc dùng =, các quy tắc đặt tên, cách liệt kê và xóa biến bằng ls() và rm().
- Kiểu dữ liệuCác kiểu dữ liệu nguyên tử trong R (double, integer, character, logical), khác biệt giữa typeof() và class(), cùng cách chuyển đổi và ép kiểu hoạt động.
- SốLàm việc với số trong R: numeric và integer, nhóm hàm làm tròn, sqrt và log, toán tử chia lấy dư %%, cùng các giá trị đặc biệt Inf và NaN.
- ChuỗiMọi thứ bạn cần để làm việc với văn bản trong R: tạo chuỗi, nối bằng paste và paste0, định dạng bằng sprintf, tìm kiếm bằng gsub, grepl và strsplit.
- Đầu vào và đầu raCách đầu ra hoạt động trong R: tự động in, print() so với cat(), message(), và cách đọc dữ liệu người dùng nhập bằng readline() và readLines().
Luồng điều khiển
- Toán tửMọi toán tử bạn cần trong R: số học gồm cả %% và %/%, phép so sánh vector hóa, khác biệt giữa & và &&, và %in% để kiểm tra phần tử thuộc tập hợp.
- If / elseLogic điều kiện trong R: cú pháp if/else if/else, cái bẫy dấu ngoặc nhọn làm hỏng script, ifelse() vector hóa cho cả vector, và switch() cho lựa chọn nhiều nhánh.
- Vòng lặp forCách vòng lặp for hoạt động trong R: lặp qua vector và chỉ số, gom kết quả mà không mắc bẫy vector cứ lớn dần, next và break, và khi nào một lệnh gọi vector hóa tốt hơn vòng lặp.
- Vòng lặp whileCách vòng lặp while hoạt động trong R: kiểm tra điều kiện trước khi lặp, repeat với break thay cho do-while, next, và những thói quen giúp tránh vòng lặp vô hạn.
Cấu trúc dữ liệu
- VectorVector là đơn vị nền tảng của R, ngay cả một con số đơn lẻ cũng là vector. Cách tạo bằng c(), đánh chỉ số (từ 1!), lọc bằng mặt nạ logic và tính toán trên cả vector cùng lúc.
- ListList là vật chứa đa năng của R: kiểu dữ liệu hỗn hợp, cấu trúc lồng nhau, cả data frame. Kỹ năng then chốt là biết khi nào [ trả về một list nhỏ hơn và khi nào [[ trả về chính phần tử đó.
- Ma trậnCách tạo ma trận bằng matrix(), cbind() và rbind(), truy cập hàng và cột, và phân biệt phép nhân từng phần tử * với phép nhân ma trận thật sự %*%.
- FactorFactor là cách R lưu dữ liệu phân loại: mã số nguyên mang nhãn văn bản. Cách tạo, sắp thứ tự, đặt mức tham chiếu và tránh cái bẫy chuyển factor sang số.
- Data frameData frame là bảng tính của R: các cột có tên, dài bằng nhau, mỗi cột một kiểu. Cách tạo, xem nhanh bằng str() và head(), và truy cập cột, hàng, ô.
- Giá trị thiếu (NA)NA nghĩa là "không biết", và nó lan sang mọi phép tính nó chạm vào. Cách phát hiện NA bằng is.na(), bỏ qua bằng na.rm = TRUE, và loại bỏ hoặc thay thế NA một cách có chủ đích.
Hàm và package
- HàmCách tạo hàm trong R: cú pháp function(x) { }, giá trị trả về, đối số mặc định và đối số có tên, dấu ..., hàm ẩn danh, và cách phạm vi hoạt động.
- Họ hàm applyHọ hàm apply, gồm apply, lapply, sapply, vapply, mapply và tapply, chạy một hàm qua mọi phần tử của dữ liệu. Đây là việc từng hàm làm và khi nào nên dùng.
- Pipe%>% nghĩa là gì, pipe gốc |> của base R hoạt động ra sao, quy tắc và placeholder của từng loại, và nên dùng loại nào khi viết code mới.
- PackageCách package trong R hoạt động: cài từ CRAN bằng install.packages(), nạp bằng library(), require() và library(), pkg::fun(), và những package đáng biết.
- Thư mục làm việcR tìm tệp ở đâu và cách điều khiển việc đó: getwd(), setwd(), list.files(), dọn environment bằng rm(list = ls()), và vì sao tự động lưu .RData là một cái bẫy.
Xử lý dữ liệu
- dplyrdplyr là gì, cách cài đặt, và cách sáu động từ cốt lõi cùng toán tử pipe biến code data frame rối rắm thành những pipeline dễ đọc.
- Lọc và lấy tập conMọi cách giữ lại các hàng và cột bạn cần: mặt nạ logic với ngoặc vuông, subset() trong một dòng, %in%, cái bẫy NA, cùng filter() và select() của dplyr.
- Thêm cột (mutate)Cách thêm, biến đổi và xóa cột của data frame: df$new <- ..., ifelse() cho cột có điều kiện, transform(), và mutate() của dplyr với case_when().
- Đổi tên cộtĐổi tên cột data frame trong R: names() và colnames(), đổi theo vị trí hay theo tên, setNames(), dplyr rename() và làm sạch tiêu đề lộn xộn khi nhập dữ liệu.
- Sắp xếpSắp xếp trong R thực sự hoạt động thế nào: sort() cho vector, vì sao data frame cần mẹo chỉ số của order(), sắp xếp giảm dần, theo nhiều cột và arrange() của dplyr.
- Group by và summarizeMọi cách tính thống kê theo nhóm trong R: đếm bằng table(), tapply() cho một thống kê mỗi nhóm, giao diện công thức của aggregate(), và group_by() với summarize() của dplyr.
- Merge và joinGhép data frame theo một khóa chung: merge() cho inner, left, right và full join, khóa khác tên với by.x/by.y, nhóm hàm join của dplyr và rbind() để nối các hàng.
- Pivot (chuyển dạng)Dữ liệu dạng rộng và dạng dài, cách chuyển qua lại giữa hai dạng: pivot_longer() và pivot_wider() của tidyr, tên cũ spread/gather, và reshape() của base R.
Nhập và xuất dữ liệu
- Đọc CSVCách nhập tệp CSV vào R bằng read.csv(): những đối số quan trọng, cái bẫy thư mục làm việc gây ra hầu hết lỗi, và khi nào nên dùng readr::read_csv.
- Đọc ExcelR không tự mở được tệp .xlsx, và package readxl lấp khoảng trống đó. Cách đọc sheet, vùng ô và tiêu đề, ghi ngược ra Excel và tránh những cái bẫy kinh điển khi nhập Excel.
- Ghi CSV và RDSXuất dữ liệu từ R: write.csv với row.names = FALSE (luôn luôn), write.table cho các dấu phân cách khác và saveRDS để lưu rồi đọc lại mà không mất kiểu dữ liệu.
- Ngày thángLớp Date của R là một số đếm ngày khoác bộ áo ngày tháng. Cách đọc chuỗi bằng as.Date, định dạng ngày khi in, trừ hai ngày, tạo dãy ngày và khi nào cần POSIXct.
Biểu đồ
- plot()Cách hàm plot() của R hoạt động: các kiểu biểu đồ, tiêu đề và nhãn trục, màu sắc, ký hiệu điểm (pch), vẽ chồng bằng lines() và abline(), và chú giải.
- HistogramCách vẽ histogram trong R bằng hist(): chọn breaks, tạo kiểu cho cột, chuyển sang thang mật độ, vẽ thêm đường cong phân phối chuẩn, và phiên bản ggplot2.
- BoxplotCách vẽ biểu đồ hộp trong R bằng boxplot(): đọc hộp và râu, dùng công thức để so sánh các nhóm, tùy chỉnh giao diện và tìm các con số đằng sau biểu đồ.
- Biểu đồ phân tánCách vẽ biểu đồ phân tán (scatter plot) trong R: vẽ hai biến bằng plot(), thêm đường hồi quy bằng abline(lm()), làm mượt bằng lowess() và tạo ma trận pairs().
- Biểu đồ cộtCách vẽ biểu đồ cột trong R bằng barplot(): từ vector có tên hoặc table(), cột nhóm và cột chồng từ ma trận, tùy chỉnh giao diện, và geom_col so với geom_bar.
- ggplot2Cách ggplot2 hoạt động: mô hình dữ liệu + aes() + geom, khác biệt giữa ánh xạ và thiết lập thuộc tính thẩm mỹ, labs(), facet_wrap(), theme, và lưu biểu đồ bằng ggsave().
Thống kê
- Thống kê mô tảCách tóm tắt dữ liệu trong R: mean(), median(), sd(), var(), summary(), quantile(). Mỗi hàm tính gì, chi tiết n−1 đằng sau sd(), và vì sao mode() của R là một cái bẫy.
- Tương quanĐo mức độ hai biến cùng biến động bằng cor(), kiểm tra mối quan hệ có thật không bằng cor.test(), và xem nhiều biến cùng lúc bằng ma trận tương quan.
- Kiểm định tChạy kiểm định t một mẫu, hai mẫu và ghép cặp bằng t.test(), và quan trọng hơn cả: đọc hiểu từng dòng kết quả, gồm t, df, p-value, khoảng tin cậy.
- ANOVASo sánh trung bình của ba nhóm trở lên bằng aov(), đọc từng ô của bảng ANOVA và tìm ra nhóm nào thực sự khác nhau bằng TukeyHSD().
- Hồi quy tuyến tínhKhớp mô hình hồi quy bằng lm(), đọc từng khối của summary() (hệ số, sai số chuẩn, p-value, R bình phương, thống kê F) và dự đoán bằng predict().
- Hồi quy logisticMô hình hóa kết quả có/không bằng glm(family = binomial): đọc summary, đổi hệ số log-odds thành tỷ số odds bằng exp(), và lấy xác suất dự đoán theo đúng cách.
- Khoảng tin cậyTính khoảng tin cậy cho trung bình, tỷ lệ và hệ số mô hình bằng t.test(), prop.test() và confint(), cùng ý nghĩa thật của "tin cậy 95%" và cách cỡ mẫu quyết định độ rộng.
- Số ngẫu nhiênTạo dữ liệu ngẫu nhiên bằng rnorm(), runif(), rbinom() và sample(), giúp kết quả tái tạo được bằng set.seed(), và hiểu hệ thống đặt tên d/p/q/r cho các phân phối của R.