Tính và vẽ trung bình theo mùa
Ở bài trước, bạn đã dùng endpoints() và 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
Hướng dẫn bài tập
- Dùng
split()để chia dữ liệuredsox_xtstheo từng mùa (trong trường hợp này làyears). Gán vàoredsox_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àmcummean()đã được thiết kế để tính tổng (bằngcumsum()) và chia cho số lượng phần tử trong tổng (bằngseq_along()). Lưu dữ liệu này vàoredsox_ytd. - Dùng
do.call()vớirbindđể 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ùa2013. Giữ nguyên đối sốylimnhư 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))