Thống kê dữ liệu theo dòng

Tác giả: Nguyễn Hải Trường | 2019-04-18

Thông thường trong quá trình phân tích dữ liệu chúng ta thống kê dữ liệu theo chiều (tức theo biến/cột) bằng việc sử dụng nhóm câu lệnh group_by() kết hợp summarise(). Tuy nhiên, đối với một số trường hợp chúng ta cần thống kê dữ liệu theo dòng.

Trong bài viết này, Ranalytics sẽ hướng dẫn các bạn cách sử dụng hàm rowSums(), rowMeans() để tính toán số tổng, trung bình theo từng quan sát (dòng).


Giả sử chúng ta sử dụng dữ liệu giả lập sau đây:

data <- data.frame(
  name = c("Viet", "Nam", "Hai", "Phong", "Hiep", "Hoa"),
  maths = c(6,7,8,9,6,10),
  english = c(7,8,9,6,8,9),
  physics = c(10,8,8,7,6,9),
  history = c(8,7,8,6,7,8)
)

data
##    name maths english physics history
## 1  Viet     6       7      10       8
## 2   Nam     7       8       8       7
## 3   Hai     8       9       8       8
## 4 Phong     9       6       7       6
## 5  Hiep     6       8       6       7
## 6   Hoa    10       9       9       8

Dữ liệu bao gồm thông tin điểm thi cuối năm các môn: Toán, Tiếng Anh, Vật lý, Lịch sử của 6 học sinh cấp 3.

Giả sử bây giờ chúng ta muốn tính tổng điểm và điểm trung bình các môn thi của từng học sinh trên.

rowSums

Sử dụng hàm rowSums() để tính tổng điểm các môn thi của từng học sinh.

library(dplyr) 

data1 <- data %>% 
  # Tạo thêm cột mới `total` tính tổng điểm
  mutate(total = rowSums(data %>% select(-name)))

data1
##    name maths english physics history total
## 1  Viet     6       7      10       8    31
## 2   Nam     7       8       8       7    30
## 3   Hai     8       9       8       8    33
## 4 Phong     9       6       7       6    28
## 5  Hiep     6       8       6       7    27
## 6   Hoa    10       9       9       8    36

rowMeans

Sử dụng hàm rowMeans() để tính điểm trung bình các môn thi của từng học sinh.

data2 <- data1 %>% 
  # Tạo thêm cột mới `mean` tính điểm trung bình các môn
  mutate(mean = rowMeans(data %>% select(-name)))

data2
##    name maths english physics history total mean
## 1  Viet     6       7      10       8    31 7.75
## 2   Nam     7       8       8       7    30 7.50
## 3   Hai     8       9       8       8    33 8.25
## 4 Phong     9       6       7       6    28 7.00
## 5  Hiep     6       8       6       7    27 6.75
## 6   Hoa    10       9       9       8    36 9.00

Như vậy, chúng ta đã vừa được học cách sử dụng hàm rowSums()rowMeans() để tính toán số tổng và trung bình theo từng dòng (quan sát). Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn!

comments powered by Disqus