Khóa học
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