purrr 與直方圖
現在你要把目前學到的重點整合起來,從兩個不同的清單出發,最後產生一個帶分面(facets)的直方圖。你會再次使用 sw_films 與 sw_people 資料集中的 Star Wars 資料,來回答這個問題:
- 各部 Star Wars 電影中,角色身高的分佈是什麼樣子?
不同電影發生在不同的行星,因此你可能會看到角色身高的分佈不同。你的第一個任務是先把兩個資料集轉成 data frame,因為 ggplot() 需要 data frame 作為輸入。接著把它們連接起來,並繪製結果:一個直方圖,且每部電影各有一個不同的分面(子圖)。
本練習屬於課程
使用 purrr 的函式式程式設計基礎
練習說明
- 用
sw_films資料集建立一個 data frame,包含每部電影的"title",以及每部電影的"characters"。 - 用
sw_people建立一個 data frame,包含"height"、"mass"、"name"和"url"元素。 - 使用
"characters" 與"url" 這兩個鍵把兩個 data frame 連接起來。 - 建立一個
ggplot()直方圖,設置x = height,並以filmtitle分面。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Turn data into correct data frame format
film_by_character <- tibble(filmtitle = map____(___, ___)) %>%
mutate(filmtitle, characters = map(___, ___)) %>%
unnest(cols = c(characters))
# Pull out elements from sw_people
sw_characters <- map____(___, `[`, c(___, ___, ___, ___))
# Join the two new objects
character_data <- inner_join(___, ___, by = c(___ = ___)) %>%
# Make sure the columns are numbers
mutate(height = as.numeric(height), mass = as.numeric(mass))
# Plot the heights, faceted by film title
ggplot(character_data, aes(x = ___)) +
geom_histogram(stat = "count") +
facet_wrap(~ ___)