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()
và 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
!