เพื่อความสมบูรณ์ของคำถามยอดนิยมนี้ เนื่องจากเวอร์ชัน 1.0.0 ของ dplyr
พารามิเตอร์ .groups จะควบคุมโครงสร้างการจัดกลุ่มของฟังก์ชัน summarise
หลัง group_by
ความช่วยเหลือในการสรุป
ด้วย .groups = "drop_last"
, summarise
จะลดระดับการจัดกลุ่มสุดท้าย นี่เป็นผลลัพธ์เดียวที่ได้รับก่อนเวอร์ชัน 1.0.0
library(dplyr)
library(scales)
original <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
#> `summarise()` regrouping output by 'am' (override with `.groups` argument)
original
#> # A tibble: 4 x 4
#> # Groups: am [2]
#> am gear n rel.freq
#> <dbl> <dbl> <int> <chr>
#> 1 0 3 15 78.9%
#> 2 0 4 4 21.1%
#> 3 1 4 8 61.5%
#> 4 1 5 5 38.5%
new_drop_last <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "drop_last") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
dplyr::all_equal(original, new_drop_last)
#> [1] TRUE
ด้วย .groups = "drop"
การจัดกลุ่มทุกระดับจะถูกยกเลิก ผลลัพธ์กลายเป็น tibble อิสระไร้ร่องรอยของ group_by
ก่อนหน้า
# .groups = "drop"
new_drop <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "drop") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
new_drop
#> # A tibble: 4 x 4
#> am gear n rel.freq
#> <dbl> <dbl> <int> <chr>
#> 1 0 3 15 46.9%
#> 2 0 4 4 12.5%
#> 3 1 4 8 25.0%
#> 4 1 5 5 15.6%
ถ้า .groups = "keep"
โครงสร้างการจัดกลุ่มเดียวกันกับ .data (mtcars ในกรณีนี้) summarise
จะไม่ลอกตัวแปรใดๆ ที่ใช้ใน group_by
ออก
สุดท้ายด้วย .groups = "rowwise"
แต่ละแถวจะมีกลุ่มของตัวเอง ก็เท่ากับเก็บเอาไว้ในสถานการณ์นี้
# .groups = "keep"
new_keep <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "keep") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
new_keep
#> # A tibble: 4 x 4
#> # Groups: am, gear [4]
#> am gear n rel.freq
#> <dbl> <dbl> <int> <chr>
#> 1 0 3 15 100.0%
#> 2 0 4 4 100.0%
#> 3 1 4 8 100.0%
#> 4 1 5 5 100.0%
# .groups = "rowwise"
new_rowwise <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "rowwise") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
dplyr::all_equal(new_keep, new_rowwise)
#> [1] TRUE
อีกประเด็นที่น่าสนใจก็คือ บางครั้งหลังจากใช้ group_by
และ summarise
แล้ว บรรทัดสรุปก็สามารถช่วยได้
# create a subtotal line to help readability
subtotal_am <- mtcars %>%
group_by (am) %>%
summarise (n=n()) %>%
mutate(gear = NA, rel.freq = 1)
#> `summarise()` ungrouping output (override with `.groups` argument)
mtcars %>% group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = n/sum(n)) %>%
bind_rows(subtotal_am) %>%
arrange(am, gear) %>%
mutate(rel.freq = scales::percent(rel.freq, accuracy = 0.1))
#> `summarise()` regrouping output by 'am' (override with `.groups` argument)
#> # A tibble: 6 x 4
#> # Groups: am [2]
#> am gear n rel.freq
#> <dbl> <dbl> <int> <chr>
#> 1 0 3 15 78.9%
#> 2 0 4 4 21.1%
#> 3 0 NA 19 100.0%
#> 4 1 4 8 61.5%
#> 5 1 5 5 38.5%
#> 6 1 NA 13 100.0%
สร้างเมื่อวันที่ 11-09-2020 โดยแพ็คเกจ reprex (v0.3.0)
หวังว่าคุณจะพบคำตอบนี้มีประโยชน์
person
josep maria porrà
schedule
09.11.2020
prop.table()
/sweep()
นอกจากนี้ ในคำถามอื่น ๆ บางคน ขอ ตัวเลือกในการรวมจำนวนศูนย์สำหรับตัวแปรหรือการโต้ตอบของตัวแปร - person smci   schedule 27.04.2016