Menu
CoddyTech

Thêm và sắp xếp

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 45 trên 64.

Gán vào một tên cột mới sẽ thêm cột đó. Phép tính số học giữa các cột được thực hiện theo từng hàng, giống như phép tính số học trên các vectơ:

orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)

Đầu ra:

  item qty price total
1  tea   2   4.0   8.0
2  jam   5   2.5  12.5
3  oil   1   9.0   9.0

df[order(df$col), ] sắp xếp các hàng theo một cột. Số hàng ở bên trái vẫn gắn với các hàng ban đầu. Dùng dấu trừ hoặc decreasing = TRUE để sắp xếp từ cao xuống thấp, và dùng khóa thứ hai để phân loại khi các giá trị bằng nhau:

orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])

Đầu ra:

  item total
2  jam  12.5
3  oil   9.0
1  tea   8.0

Một cột mới có thể chứa văn bản được tạo từ các cột khác. sprintf() xử lý toàn bộ các cột cùng lúc:

orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)

Đầu ra:

[1] "2 x tea" "5 x jam"

rbind() thêm một hàng từ khung dữ liệu có một hàng với cùng các cột, còn head(df, n) giữ lại n hàng đầu tiên:

orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))

Đầu ra:

[1] 3
  item qty
2  jam   5
1  tea   2
challenge icon

Thử thách

Dễ

Hoàn thiện order_totals(df). df có các cột item, qty và price. Thêm cột total (số lượng nhân với giá), sắp xếp các hàng theo tổng từ cao xuống thấp (các mặt hàng có tổng bằng nhau được sắp xếp theo thứ tự bảng chữ cái), rồi trả về một dòng cho mỗi hàng, jam: 12.50, với tổng được làm tròn đến hai chữ số thập phân.

Code được cung cấp đọc bảng từ đầu vào bằng read.csv(text = input): dòng đầu tiên chứa tên các cột, mỗi dòng tiếp theo là một hàng, các giá trị được phân tách bằng dấu phẩy. Code in ra từng dòng được trả về.

Tự làm thử

order_totals <- function(df) {
  # Viết code của bạn ở đây
  character(0)
}

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch R online