Bắt đầu ngayBắt đầu miễn phí

Tính và vẽ trung bình theo mùa

Ở bài trước, bạn đã dùng endpoints()period.apply() để nhanh chóng tính trung bình thắng/thua của Boston Red Sox vào cuối mỗi mùa giải. Nhưng nếu bạn cần biết trung bình tích lũy trong suốt từng mùa thì sao? Cả các nhà thống kê lẫn người hâm mộ thể thao thường dựa vào chỉ số này để so sánh một đội với các đối thủ.

Để tính trung bình tích lũy trong mỗi mùa, bạn sẽ quay lại công thức split-lapply-rbind đã luyện ở Chương Ba. Trước hết, bạn sẽ tách dữ liệu theo mùa, sau đó áp dụng hàm trung bình tích lũy cho cột win_loss trong từng mùa, rồi ghép các giá trị trở lại thành một đối tượng xts.

Một hàm cummean() tùy chỉnh, tạo tổng tích lũy rồi chia cho số lượng giá trị có trong tổng, đã được tạo sẵn cho bạn. Dữ liệu redsox_xts, bao gồm cột win_loss, đã có sẵn trong không gian làm việc của bạn.

Bài tập này là một phần của khóa học

Nghiên cứu tình huống: Phân tích dữ liệu chuỗi thời gian của thành phố bằng R

Xem khóa học

Hướng dẫn bài tập

  • Dùng split() để chia dữ liệu redsox_xts theo từng mùa (trong trường hợp này là years). Gán vào redsox_seasons.
  • Dùng lapply() để tính trung bình tích lũy cho mỗi mùa. Trong bài này, một hàm cummean() đã được thiết kế để tính tổng (bằng cumsum()) và chia cho số lượng phần tử trong tổng (bằng seq_along()). Lưu dữ liệu này vào redsox_ytd.
  • Dùng do.call() với rbind để chuyển đầu ra dạng list của bạn thành một đối tượng xts duy nhất (redsox_winloss) chứa trung bình thắng/thua trong suốt mỗi mùa.
  • Dùng plot.xts() để xem trung bình thắng/thua tích lũy trong mùa 2013. Giữ nguyên đối số ylim như trong mã đã viết sẵn.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Split redsox_xts win_loss data into years 
redsox_seasons <- split(___$___, f = "___")

# Use lapply to calculate the cumulative mean for each season
redsox_ytd <- lapply(___, cummean)

# Use do.call to rbind the results
redsox_winloss <- do.call(___, ___)

# Plot the win_loss average for the 2013 season
plot.xts(___["___"], ylim = c(0, 1))
Chỉnh sửa và Chạy Mã