Chuyển đến nội dung chính

Hướng dẫn Tái cấu trúc Dữ liệu trong R

Tìm hiểu về tái cấu trúc dữ liệu trong R, các hàm như rbind(), cbind(), cùng với Melt(), Dcast(), và cuối cùng là hàm chuyển vị (transpose).
Đã cập nhật 5 thg 10, 2026  · 7 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Tái cấu trúc dữ liệu (Data Reshaping) trong R là việc sắp xếp lại các hàng và cột theo cách của riêng bạn để sử dụng theo nhu cầu. Phần lớn dữ liệu được lấy dưới dạng data frame trong R để xử lý dữ liệu bằng các hàm như 'rbind()', 'cbind()', v.v.

Trong quá trình này, bạn thay đổi hình dạng hoặc tổ chức lại dữ liệu thành các hàng và cột. Reshaping là việc tổ chức lại dữ liệu theo một cách cụ thể mà bạn cần để tiếp tục xử lý.

Tạo dữ liệu của bạn

Hãy tạo bộ sinh số ngẫu nhiên và tạo các cột để nối chúng vào data frame. Đồng thời, chèn id để dùng về sau. 'set.seed(123)' được dùng để tạo số ngẫu nhiên sao cho cùng một mẫu được tái tạo trên mọi máy. Ba biến, colm1, colm2, colm3, được tạo. Với 'sample()', các giá trị từ 1 đến 15 được sinh ra và có thể lặp lại. Một data frame được dùng để lưu dữ liệu theo dạng bảng, và id cũng được thêm vào, là một số duy nhất.

set.seed(123)
N <- 15
colm1  <- sample(1:15, N, replace=TRUE)
colm2  <- sample(1:15, N, replace=TRUE)
colm3  <- sample(1:15, N, replace=TRUE)
df_Temp <- data.frame(colm1, colm2,colm3)
df_Temp$id<-seq(nrow(df_Temp))
df_Temp

Đoạn mã trên cho kết quả gồm ba cột tên 'colm1', 'colm2', 'colm3' và có id từ 1 đến 15. Các giá trị trong từng cột được điền từ 1 đến 15, trong đó một số số có thể lặp lại, trong khi một số khác có thể không xuất hiện.

 colm1   colm2   colm3  id
  15      11     14     1
  15      5      3      2
  3       3      4      3
  14      11     14     4
  3       9      1      5
  10      12     11     6
  2       9      7      7
  6       9      5      8
  11      13     12     9
  5       3      15     10
  4       8      10     11
  14      10     13     12
  6       7      7      13
  9       10     9      14
 10       9      9      15 

Hàm cbind

Cách dùng: dùng để kết hợp vector, ma trận và data frame theo cột.
Tham số: cbind(v1,v2): v1,v2 có thể là vector, ma trận hoặc data frame

Hãy xem ví dụ về việc ghép cột.

id có thể được chọn bằng 'df_Temp[,4]' trong khi 'df_Temp[,2]' chọn 'colm2' của df_Temp như dưới đây, hai giá trị này được truyền vào 'cbind()' và lưu vào biến 'cbindexample'. Tiếp theo, có thể đổi tên cột bằng 'colnames()' với đầu vào là vector c sang giá trị mới, tức 'newid', 'new_colm2'.

cbindexample<-cbind(df_Temp[,4],df_Temp[,2])
colnames(cbindexample)<- c('newid','new_colm2')
cbindexample

Đoạn mã trên cho kết quả cho thấy bạn có thể ghép hai cột id và column2 bằng hàm 'cbind' để tạo một data frame mới. Đồng thời, tên cột đã được đổi: 'new_colm2' và 'id' đổi thành 'newid'.

newid   new_colm2
1         11
2         5
3         3
4         11
5         9
6         12
7         9
8         9
9         13
10         3
11         8
12         10
13         7
14         10
15         9

Hàm rbind:

Cách dùng: rbind dùng để kết hợp các vector, ma trận hoặc data frame theo hàng.
Tham số: rbind(v1,v2): v1,v2 có thể là vector, ma trận hoặc data frame.

Hãy tạo một vector mới tên 'new_vector' và kết hợp nó với 'cbindexample' gồm 2 cột bằng 'rbind', cả hai được nối và lưu vào 'rbindexample'.

new_vector<- c(16,15)
rbindexample<- rbind(cbindexample,new_vector)
rbindexample

Đoạn mã trên cho kết quả dưới đây, trong đó hàng mới được thêm với giá trị 16 và 15 tương ứng ở 'newid' và 'new_colm2'.

newid    new_colm2
1        11
2        5
3        3
4        11
5        9
6        12
7        9
8        9
9        13
10       3
11       8
12       10
13       7
14       10
15       9
16       15

Hàm Melt:

Cách dùng: Hàm Melt dùng để chuyển một đối tượng sang trạng thái "tan chảy" (molten), nghĩa là nó lấy nhiều cột dữ liệu và chuyển thành một cột dữ liệu duy nhất.
Tham số: melt(data,…,na.rm=FALSE/TRUE, value.name=”value” ),
Data: Đầu vào mà bạn sẽ melt.
...: Các đối số được truyền vào/nhận từ.
Na.rm: Dùng để chuyển các giá trị thiếu rõ ràng thành thiếu ngầm định.
Value.name: để lưu trữ giá trị vào biến
Hãy xem đoạn mã bạn 'melt' dữ liệu theo biến id vào một cột với tên cột và giá trị:

Hãy nhập thư viện 'reshape2' bằng 'library()' và dùng melt để kết hợp các cột 'dfTemp' colm1, colm2, colm3 vào một nơi gọi là 'variable' theo biến 'id'.

library(reshape2)
molted=melt(df_Temp,id.vars=c("id"))
molted
id    variable value
1    colm1    15
2    colm1     15
3    colm1     3
4    colm1     14
5    colm1     3
6    colm1     10
7    colm1     2
8    colm1     6
9    colm1     11
10    colm1     5
11    colm1     4
12    colm1     14
13    colm1     6
14    colm1     9
15    colm1     10
1    colm2     11
2    colm2     5
3    colm2     3
4    colm2     11
5    colm2     9
6    colm2     12
7    colm2     9
8    colm2     9
9    colm2     13
10    colm2     3
11    colm2     8
12    colm2     10
13    colm2     7
14    colm2     10
15    colm2     9
1    colm3     14
2    colm3     3
3    colm3     4
4    colm3     14
5    colm3     1
6    colm3     11
7    colm3     7
8    colm3     5
9    colm3     12
10    colm3     15
11    colm3     10
12    colm3     13
13    colm3     7
14    colm3     9
15    colm3     9

Kết quả trên cho thấy khi bạn melt dữ liệu của colm1, colm2, colm3 theo biến id, chúng được kết hợp vào một cột tên là 'variable' và giá trị của cột được chứa trong 'value'.

Hàm Dcast:

Cách dùng: khi bạn có một tập dữ liệu đã melt thì có thể chuyển nó về định dạng ban đầu bằng hàm này.
Tham số: dcast(data,id_variable~value),
data: dữ liệu đã melt cần chuyển về dạng gốc.
Id_variable: một hoặc nhiều cột dùng để melt dữ liệu của các cột khác vào một cột.
~: sau ký hiệu này, chúng ta dùng các giá trị hoặc cột mới đã melt của tập dữ liệu molten.

Bạn có thể xem đoạn mã dưới đây, 'reshape2' được nhập bằng 'library()', trong đó 'dcast()' nhận tham số đầu là dữ liệu đã thực hiện 'melt()' và ký hiệu '~' với id nơi cột melt mới được tạo.

library(reshape2)
dcast(molted,id~variable)
id    colm1    colm2    colm3
1        15        11        14
2        15        5         3
3        3        3         4
4        14        11       14
5        3        9         1
6        10        12        11
7        2         9         7
8        6        9         5
9       11        13        12
10       5        3        15
11       4        8        10
12       14        10        13
13       6        7        7
14       9        10        9
15      10        9        9

Bạn có thể thấy dữ liệu sau khi 'melt()' đã được chuyển về tập dữ liệu gốc. Có ba cột với các giá trị tương ứng và id ở một cột riêng.

Hàm chuyển vị (Transpose):

Cách dùng: Dùng để đổi hàng thành cột và cột thành hàng.
Tham số: t(data), data là data frame bạn cần truyền vào để lấy chuyển vị.

Hãy đổi hàng thành cột và ngược lại bằng hàm transpose. Có thể thực hiện đơn giản bằng 't(df_Temp)' như dưới đây.

trans <- t(df_Temp)
trans

Đoạn mã trên cho kết quả sau:

colm1    15    15    3    14    3    10    2    6    11    5    4    14    6    9    10
colm2    11    5    3    11    9    12    9    9    13    3    8    10    7    10    9
colm3    14    3    4    14    1    11    7    5    12    15    10    13    7    9    9
id    1    2    3    4    5    6    7    8    9    10    11    12    13    14    15

Bạn có thể thấy data frame có hình dạng 15 hàng và 4 cột đã được đổi thành 15 cột và 3 hàng bằng phép chuyển vị dữ liệu.

Chúc mừng

Chúc mừng bạn đã đi đến cuối bài hướng dẫn!

Trong hướng dẫn này, bạn đã tìm hiểu các hàm khác nhau của R như 'rbind()', 'cbind()', cùng với 'Melt()', 'Dcast()', và cuối cùng là hàm chuyển vị.

Nếu bạn muốn học thêm về R, hãy tham gia khóa học Introduction to R của DataCamp và xem R Packages: A Beginner's Tutorial của chúng tôi.

Tài liệu tham khảo:
Hàm Melt

Chủ đề
R
Khoa học Dữ liệu

Khóa học R

Khóa học

Nhập môn Ngôn ngữ lập trình R

4 giờ
3.1M
Nắm vững kiến thức cơ bản về phân tích dữ liệu trong R, gồm vectors, lists và data frames; luyện tập R với các data set thực tế.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm