Chia tách tập dữ liệu
Trong một bài tập trước, bạn đã xác định rằng số lượt retweet trung bình trên mỗi tweet là 3.3. Ở bài này, chúng ta sẽ xem có bao nhiêu tweet cao hơn mức trung bình này và bao nhiêu thấp hơn.
Để làm được điều đó, trước tiên chúng ta sẽ tạo một mapper kiểm tra xem .x có lớn hơn 3.3 hay không. Sau đó, chúng ta sẽ điền sẵn map_at(), với .at là "retweet_count", và .f lần lượt là mapper vừa tạo, rồi đến phần phủ định của mapper này.
Lưu ý rằng kể từ khi khóa học được tạo, hành vi của purrr đã thay đổi, và để tránh xung đột đối số giữa .f trong partial() và .f trong map_at(), bạn phải dùng toán tử gán bán trích dẫn := (đôi khi được gọi là "toán tử walrus"). Trong phạm vi bài tập này, bạn chỉ cần biết rằng := hoạt động giống =, nhưng giúp partial() biết rằng đối số nên được truyền cho map_at() thay vì được giữ lại cho chính nó.
Khi đã tạo xong các công cụ này, chúng ta sẽ áp dụng chúng lên đối tượng non_rt, là phần trích xuất các "original tweets" từ bộ dữ liệu rstudioconf.
purrr đã được nạp sẵn cho bạn.
Bài tập này là một phần của khóa học
Lập trình hàm nâng cao với purrr
Hướng dẫn bài tập
Tạo
mean_above, một mapper kiểm tra xem.xcó lớn hơn3.3hay không.Điền sẵn hai phiên bản của
map_at(): một với"retweet_count"&mean_above, và một với"retweet_count"& phần phủ định củamean_above.Map hai hàm đã điền sẵn này lên
non_rt, và chỉ giữ lại các phần tử"retweet_count".Lấy kích thước của hai kết quả.
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.
# Create mean_above, a mapper that tests if .x is over 3.3
mean_above <- ___(~ ___)
# Prefil map_at() with "retweet_count", mean_above for above,
# and mean_above negation for below
above <- partial(___, .at = "retweet_count", .f := ___ )
below <- partial(___, .at = "retweet_count", .f := ___ )
# Map above() and below() on non_rt, keep the "retweet_count"
ab <- ___(non_rt, ___) %>% ___("retweet_count")
bl <- ___(non_rt, ___) %>% ___("retweet_count")
# Compare the size of both elements
___(ab)
___(bl)