Tóm tắt hàng và cột
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 19 trên 64.
rowSums() và rowMeans() trả về một kết quả cho mỗi hàng; colSums() và colMeans() trả về một kết quả cho mỗi cột. Ở đây, mỗi hàng là một học sinh và mỗi cột là một bài kiểm tra:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(rowMeans(scores))
print(colSums(scores))Đầu ra:
[1] 80.00000 73.33333
[1] 140 165 155Với mọi phép tổng hợp khác, apply(m, 1, f) gọi f trên từng hàng và apply(m, 2, f) trên từng cột:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(apply(scores, 1, max))
print(apply(scores, 2, min))Đầu ra:
[1] 90 85
[1] 60 75 70Kết hợp phép tính tóm tắt với which.max() để tìm hàng hoặc cột nào có giá trị cao nhất:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
best_test <- which.max(colMeans(scores))
print(best_test)
print(round(rowMeans(scores), 1))Đầu ra:
[1] 2
[1] 80.0 73.3apply() cũng chấp nhận một hàm mà bạn viết ngay tại chỗ bằng function(r). Ở đây, hàm này đếm các giá trị lớn hơn 5 trong mỗi hàng:
m <- matrix(c(3, 8, 1, 9, 2, 7), nrow = 2, byrow = TRUE)
print(apply(m, 1, function(r) sum(r > 5)))Đầu ra:
[1] 1 2Thử thách
DễHoàn thiện class_report(scores). Mỗi hàng của scores là một học sinh và mỗi cột là một bài kiểm tra. Trả về một dòng cho mỗi học sinh, Student 1: 81.7, kèm giá trị trung bình được làm tròn đến một chữ số thập phân. Thêm dòng cuối Best test: , theo sau là số thứ tự của cột có giá trị trung bình cao nhất.
Code được cung cấp đọc một ma trận từ một dòng: các hàng được phân tách bằng ; và các giá trị trong một hàng được phân tách bằng ,, vì vậy 1,2;3,4 là ma trận có các hàng 1 2 và 3 4. Code in ra từng dòng được trả về.
Tự làm thử
class_report <- function(scores) {
# Viết code của bạn ở đây
character(0)
}
# Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(class_report(parse_matrix(input[1])), sep = "\n")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểmTự luyện tập: Trình biên dịch R online