Ví dụ về hàm tổng hợp trong R: summarise() và group_by()

⚡ Tóm tắt thông minh

Hàm tổng hợp trong R với thư viện dplyr cho phép gộp nhiều hàng thành một thống kê duy nhất cho mỗi nhóm. Hướng dẫn này kết hợp hàm group_by() với hàm summarise() trên dữ liệu thống kê đánh bóng của Lahman để tính toán giá trị trung bình, tổng, độ chênh lệch, số lượng và giá trị vị trí trên 104,324 quan sát.

  • 🧮 Động từ cốt lõi: Hàm summarise(df, name = function(column)) trả về một hàng, và hàm group_by() trước tiên sẽ chuyển hàng đó thành một hàng cho mỗi nhóm.
  • 📊 Các nhóm thống kê: Giá trị trung bình và trung vị mô tả giá trị trung tâm, độ lệch chuẩn và khoảng tứ phân vị mô tả độ phân tán, giá trị nhỏ nhất và lớn nhất mô tả phạm vi.
  • 🔢 Đếm n() đếm số hàng trong nhóm hiện tại và n_distinct() đếm số giá trị duy nhất trong nhóm đó.
  • 📍 Các yếu tố hỗ trợ theo vị trí: ví dụ first(), last() và nth()tracmột quan sát cụ thể từ mỗi nhóm.
  • 🔄 Bài viết nhiều cột: Hàm across() áp dụng một hàm cho nhiều cột mà không cần lặp lại mã cho từng cột.
  • 4 Nhómping Vệ sinh: Luôn gọi hàm ungroup() trước khi thực hiện phép tính cần chạy lại trên toàn bộ bảng.

Hàm tổng hợp R

Bộ dữ liệu được sử dụng trong hướng dẫn này

Tóm tắt một biến số giúp bạn có cái nhìn tổng quan ban đầu về dữ liệu, còn tóm tắt theo nhóm sẽ cho bạn biết nhiều hơn về cách phân bố các giá trị. Hướng dẫn này sẽ chỉ ra cách tổng hợp tập dữ liệu theo nhóm bằng thư viện dplyr.

Hướng dẫn này sử dụng bộ dữ liệu đánh bóng Lahman. Sau khi nhập và giữ lại...ping Chỉ bao gồm chín cột được liệt kê bên dưới, khung dữ liệu làm việc chứa 104,324 quan sát và 9 biến:

  • playerID: Mã ID người chơi. Nhân tố
  • nămID: Năm. Nhân tố
  • teamID: Đội. nhân tố
  • lgID: Liên đoàn. Hệ số: AA AL FL NL PL UA
  • AB: Ở con dơi. số
  • G: Games: số trận đấu của một người chơi. số
  • R: Chạy. số
  • Nhân sự: Homeruns. số
  • SH: Những đòn hy sinh. số

Trước khi thực hiện tóm tắt, bạn sẽ thực hiện các bước sau để chuẩn bị dữ liệu:

  • Bước 1: Nhập dữ liệu
  • Bước 2: Chọn các biến liên quan
  • Bước 3: Sắp xếp dữ liệu
library(dplyr)

# Step 1
data <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/lahman-batting.csv") %>%

# Step 2
select(c(playerID, yearID, AB, teamID, lgID, G, R, HR, SH))  %>% 

# Step 3
arrange(playerID, teamID, yearID)

Một cách tốt khi bạn nhập tập dữ liệu là sử dụng hàm look() để biết về cấu trúc của tập dữ liệu.

# Structure of the data
glimpse(data)

Đầu ra:

Observations: 104,324
Variables: 9
$ playerID <fctr> aardsda01, aardsda01, aardsda01, aardsda01, aardsda01, a...
$ yearID   <int> 2015, 2008, 2007, 2006, 2012, 2013, 2009, 2010, 2004, 196...
$ AB       <int> 1, 1, 0, 2, 0, 0, 0, 0, 0, 603, 600, 606, 547, 516, 495, ...
$ teamID   <fctr> ATL, BOS, CHA, CHN, NYA, NYN, SEA, SEA, SFN, ATL, ATL, A...
$ lgID     <fctr> NL, AL, AL, NL, AL, NL, AL, AL, NL, NL, NL, NL, NL, NL, ...
$ G        <int> 33, 47, 25, 45, 1, 43, 73, 53, 11, 158, 155, 160, 147, 15...
$ R        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 113, 84, 100, 103, 95, 75...
$ HR       <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 39, 29, 44, 38, 47, 34, 40...
$ SH       <int> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, ...

tóm tắt()

Cú pháp của summarise() là cơ bản và nhất quán với các động từ khác có trong thư viện dplyr.

summarise(df, variable_name=condition) 
arguments: 
- `df`: Dataset used to construct the summary statistics 
- `variable_name=condition`: Formula to create the new variable

Nhìn vào đoạn mã dưới đây:

summarise(data, mean_run =mean(R))

Code Giải thích

  • tóm tắt (dữ liệu, Mean_run = Mean(R)): Tạo một biến có tên Mean_run là giá trị trung bình của cột chạy từ dữ liệu tập dữ liệu.

Đầu ra:

##   mean_run
## 1 19.20114

Bạn có thể thêm bao nhiêu biến tùy thích. Bạn trả lại số trò chơi trung bình đã chơi và số lần hy sinh trung bình.

summarise(data, mean_games = mean(G),
    mean_SH = mean(SH, na.rm = TRUE))

Code Giải thích

  • Mean_SH = Mean(SH, na.rm = TRUE): Tổng hợp biến thứ 2. Bạn đặt na.rm = TRUE vì cột SH chứa các quan sát bị thiếu.

Đầu ra:

##   mean_games  mean_SH
## 1   51.98361 2.340085

group_by() so với không sử dụng group_by()

Khi được sử dụng riêng lẻ, summarise() thu gọn toàn bộ khung dữ liệu thành một hàng duy nhất, như các ví dụ trên đã minh họa. Sức mạnh thực sự của nó xuất hiện khi bạn thêm group_by(): dplyr Sau đó, thư viện sẽ áp dụng phép tính tương tự một cách riêng biệt cho từng nhóm và trả về một hàng cho mỗi nhóm.

Lưu ý rằng, group_by hoạt động hoàn hảo với tất cả các động từ khác (tức là mutate(), filter(), sắp xếp(), …).

Sẽ rất thuận tiện khi sử dụng toán tử đường ống khi bạn có nhiều bước. Bạn có thể tính toán homerun trung bình theo giải đấu bóng chày.

data %>%
	group_by(lgID) %>%
	summarise(mean_run = mean(HR))

Code Giải thích

  • dữ liệu: Tập dữ liệu được sử dụng để xây dựng số liệu thống kê tóm tắt
  • group_by(lgID): Chia dữ liệu theo giá trị của lgID trước khi tóm tắt.
  • tóm tắt(mean_run = Mean(HR)): Tính homerun trung bình

Đầu ra:

## 
# A tibble: 7 x 2
##     lgID  mean_run
##   <fctr>     <dbl>
## 1     AA 0.9166667
## 2     AL 3.1270988
## 3     FL 1.3131313
## 4     NL 2.8595953
## 5     PL 2.5789474
## 6     UA 0.6216216
## 7   <NA> 0.2867133	

Đường ống này cũng hoạt động với ggplot(), vì vậy toàn bộ chuỗi từ dữ liệu thô đến biểu đồ hoàn chỉnh đều nằm trong một câu lệnh duy nhất. Đoạn mã bên dưới kết hợp group_by(), summarise() và ggplot() để hiển thị số lượng trung bình các cú home run mỗi giải đấu dưới dạng biểu đồ cột.

Bạn sẽ thực hiện các bước sau:

  • Bước 1: Chọn khung dữ liệu
  • Bước 2: Nhóm dữ liệu
  • Bước 3: Tóm tắt dữ liệu
  • Bước 4: Vẽ biểu đồ thống kê tóm tắt
library(ggplot2)
# Step 1
data %>% 
#Step 2
group_by(lgID) %>% 
#Step 3
summarise(mean_home_run = mean(HR)) %>% 
#Step 4
ggplot(aes(x = lgID, y = mean_home_run, fill = lgID)) +
    geom_bar(stat = "identity") +
    theme_classic() +
    labs(
        x = "baseball league",
        y = "Average home run",
        title = paste(
            "Example group_by() with summarise()"
        )
    )

Đầu ra:

Ví dụ Group_by với Tóm tắt

Các hàm bạn có thể sử dụng bên trong hàm summarise()

Động từ summarise() tương thích với hầu hết tất cả các hàm trong R. Dưới đây là danh sách ngắn các hàm hữu ích mà bạn có thể sử dụng cùng với summarise():

Mục tiêu Chức năng Mô tả Chi tiết
Cơ bản bần tiện() Trung bình của vectơ x
Trung bình() Trung vị của vectơ x
Tổng() Tổng vectơ x
biến thể sd() độ lệch chuẩn của vectơ x
IQR() Tứ phân vị của vectơ x
Phạm vi min () Tối thiểu của vectơ x
max () Tối đa của vectơ x
lượng tử() Lượng tử của vectơ x
Chức vụ đầu tiên() Sử dụng với group_by() Quan sát đầu tiên của nhóm
cuối cùng() Sử dụng với group_by(). Quan sát cuối cùng của nhóm
thứ n() Sử dụng với group_by(). quan sát thứ n của nhóm
Đếm n () Sử dụng với group_by(). Đếm số hàng
n_distinct() Sử dụng với group_by(). Đếm số lượng quan sát riêng biệt

Các phần bên dưới sẽ trình bày ví dụ cho từng chức năng trong bảng trên. Nếu bạn chưa quen với toán tử pipe và các động từ khác, hãy bắt đầu với phần đầu tiên. Hướng dẫn chọn, lọc và sắp xếp.

Chức năng cơ bản

Trong ví dụ trước, bạn không lưu trữ số liệu thống kê tóm tắt trong khung dữ liệu.

Bạn có thể tạo khung dữ liệu từ bản tóm tắt theo hai bước:

  • Bước 1: Lưu trữ khung dữ liệu để sử dụng tiếp
  • Bước 2: Sử dụng tập dữ liệu để tạo biểu đồ đường

Bước 1) Bạn tính số lượng trò chơi trung bình được chơi theo năm.

## Mean
ex1 <- data %>%
	group_by(yearID) %>%
	summarise(mean_game_year = mean(G))
head(ex1)

Code Giải thích

  • Thống kê tóm tắt về tập dữ liệu đánh bóng được lưu trữ trong khung dữ liệu ex1.

Đầu ra:

## # A tibble: 6 x 2
##   yearID mean_game_year
##    <int>          <dbl>
## 1   1871       23.42308
## 2   1872       18.37931
## 3   1873       25.61538
## 4   1874       39.05263
## 5   1875       28.39535
## 6   1876       35.90625	

Bước 2) Bạn hiển thị số liệu thống kê tóm tắt bằng biểu đồ đường và xem xu hướng.

# Plot the graph
ggplot(ex1, aes(x = yearID, y = mean_game_year)) +
    geom_line() +
    theme_classic() +
    labs(
        x = "Year",
        y = "Average games played",
        title = paste(
            "Average games played from 1871 to 2016"
        )
    )

Đầu ra:

Ví dụ về hàm cơ bản

Thiết lập con

Hàm tóm tắt() tương thích với tập hợp con.

## Subsetting + Median
data %>%
group_by(lgID) %>%
summarise(median_at_bat_league = median(AB), 
	#Compute the median without the zero 
	median_at_bat_league_no_zero = median(AB[AB > 0]))

Code Giải thích

  • trung vị_at_bat_league_no_zero = trung vị(AB[AB > 0]): Biến AB chứa nhiều số 0. Bạn có thể so sánh trung vị của tại dơi biến có và không có 0.

Đầu ra:

## # A tibble: 7 x 3
##     lgID median_at_bat_league median_at_bat_league_no_zero
##   <fctr>                <dbl>                        <dbl>
## 1     AA                  130                          131
## 2     AL                   38                           85
## 3     FL                   88                           97
## 4     NL                   56                           67
## 5     PL                  238                          238
## 6     UA                   35                           35
## 7   <NA>                  101                          101	

Tổng

Một hàm hữu ích khác để tổng hợp biến là sum().

Bạn có thể kiểm tra xem giải đấu nào có nhiều homerun hơn.

## Sum
data %>%
	group_by(lgID) %>%
	summarise(sum_homerun_league = sum(HR))

Đầu ra:

## # A tibble: 7 x 2
##     lgID sum_homerun_league
##   <fctr>              <int>
## 1     AA                341
## 2     AL              29426
## 3     FL                130
## 4     NL              29817
## 5     PL                 98
## 6     UA                 46
## 7   <NA>                 41	

Độ lệch chuẩn

Độ trải rộng của dữ liệu được tính bằng độ lệch chuẩn hoặc sd() trong R.

# Spread
data %>%
	group_by(teamID) %>%
	summarise(sd_at_bat_league = sd(HR))

Đầu ra:

## # A tibble: 148 x 2
##    teamID sd_at_bat_league
##    <fctr>            <dbl>
##  1    ALT               NA
##  2    ANA        8.7816395
##  3    ARI        6.0765503
##  4    ATL        8.5363863
##  5    BAL        7.7350173
##  6    BFN        1.3645163
##  7    BFP        0.4472136
##  8    BL1        0.6992059
##  9    BL2        1.7106757
## 10    BL3        1.0000000
## # ... with 138 more rows		

Sự chênh lệch về số lần đánh bóng ra ngoài sân nhà giữa các đội rất lớn, và ALT trả về NA vì đội đó chỉ có một hàng, do đó không thể tính độ lệch chuẩn.

Tối thiểu và tối đa

Bạn có thể truy cập mức tối thiểu và tối đa của một vectơ bằng hàm min() và max().

Mã bên dưới trả về số trận đấu thấp nhất và cao nhất trong một mùa giải mà một người chơi đã chơi.

# Min and max
data %>%
	group_by(playerID) %>%
	summarise(min_G = min(G),
    max_G = max(G))

Đầu ra:

## # A tibble: 10,395 x 3
##     playerID min_G max_G
##       <fctr>       <int>
##  1 aardsda01    53    73
##  2 aaronha01   120   156
##  3  aasedo01    24    66
##  4  abadfe01    18    18
##  5 abadijo01    11    11
##  6 abbated01     3   153
##  7 abbeybe01    11    11
##  8 abbeych01    80   132
##  9 abbotgl01     5    23
## 10 abbotji01    13    29
## # ... with 10,385 more rows

Đếm

Việc đếm số lượng quan sát trên mỗi nhóm luôn đáng làm. Trong R, hàm n() trả về số hàng trong nhóm hiện tại.

Ví dụ: mã bên dưới tính số năm chơi của mỗi người chơi.

# count observations
data %>%
	group_by(playerID) %>%
	summarise(number_year = n()) %>%
	arrange(desc(number_year))

Đầu ra:

## # A tibble: 10,395 x 2
##     playerID number_year
##       <fctr>       <int>
##  1 pennohe01          11
##  2 joosted01          10
##  3 mcguide01          10
##  4  rosepe01          10
##  5 davisha01           9
##  6 johnssi01           9
##  7  kaatji01           9
##  8 keelewi01           9
##  9 marshmi01           9
## 10 quirkja01           9
## # ... with 10,385 more rows

Đầu tiên và cuối cùng

Bạn có thể chọn vị trí đầu tiên, cuối cùng hoặc thứ n của một nhóm.

Ví dụ: bạn có thể tìm thấy năm đầu tiên và năm cuối cùng của mỗi người chơi.

# first and last
data %>%
	group_by(playerID) %>%
	summarise(first_appearance = first(yearID),
		last_appearance = last(yearID))

Đầu ra:

## # A tibble: 10,395 x 3
##     playerID first_appearance last_appearance
##       <fctr>            <int>           <int>
##  1 aardsda01             2009            2010
##  2 aaronha01             1973            1975
##  3  aasedo01             1986            1990
##  4  abadfe01             2016            2016
##  5 abadijo01             1875            1875
##  6 abbated01             1905            1897
##  7 abbeybe01             1894            1894
##  8 abbeych01             1895            1897
##  9 abbotgl01             1973            1979
## 10 abbotji01             1992            1996
## # ... with 10,385 more rows

quan sát thứ n

Hàm nth() bổ sung cho hàm first() và last(). Nó trả về quan sát tại chỉ số bạn truyền vào trong mỗi nhóm.

Ví dụ: bạn chỉ có thể lọc năm thứ hai mà một đội đã thi đấu.

# nth
data %>%
	group_by(teamID) %>%
	summarise(second_game = nth(yearID, 2)) %>%
	arrange(second_game)

Đầu ra:

## # A tibble: 148 x 2
##    teamID second_game
##    <fctr>       <int>
##  1    BS1        1871
##  2    CH1        1871
##  3    FW1        1871
##  4    NY2        1871
##  5    RC1        1871
##  6    BR1        1872
##  7    BR2        1872
##  8    CL1        1872
##  9    MID        1872
## 10    TRO        1872
## # ... with 138 more rows

Số lượng quan sát khác nhau

Hàm n() trả về số hàng trong nhóm hiện tại. Hàm n_distinct() liên quan thì đếm các giá trị duy nhất.

Trong ví dụ tiếp theo, bạn cộng tổng số cầu thủ mà một đội đã tuyển dụng trong tất cả các giai đoạn.

# distinct values
data %>%
	group_by(teamID) %>%
	summarise(number_player = n_distinct(playerID)) %>%
	arrange(desc(number_player))

Code Giải thích

  • group_by(teamID): Nhóm theo đội
  • tóm tắt(number_player = n_khác biệt(playerID)): Đếm số lượng người chơi khác nhau trong mỗi đội
  • sắp xếp(desc(number_player)): Sắp xếp dữ liệu theo số lượng người chơi

Đầu ra:

## # A tibble: 148 x 2
##    teamID number_player
##    <fctr>         <int>
##  1    CHN           751
##  2    SLN           729
##  3    PHI           699
##  4    PIT           683
##  5    CIN           679
##  6    BOS           647
##  7    CLE           646
##  8    CHA           636
##  9    DET           623
## 10    NYA           612
## # ... with 138 more rows

Nhiều nhóm

Một thống kê tóm tắt có thể được thực hiện giữa nhiều nhóm.

# Multiple groups
data %>%
	group_by(yearID, teamID) %>%
	summarise(mean_games = mean(G)) %>%
	arrange(desc(teamID, yearID))

Code Giải thích

  • group_by(yearID, teamID): Nhóm theo năm nhóm
  • summarise(mean_games = mean(G)): Tính trung bình số trận đấu đã chơi
  • sắp xếp(desc(teamID, YearID)): Sắp xếp dữ liệu theo nhóm và năm

Đầu ra:

## # A tibble: 2,829 x 3
## # Groups:   yearID [146]
##    yearID teamID mean_games
##     <int> <fctr>      <dbl>
##  1   1884    WSU   20.41667
##  2   1891    WS9   46.33333
##  3   1886    WS8   22.00000
##  4   1887    WS8   51.00000
##  5   1888    WS8   27.00000
##  6   1889    WS8   52.42857
##  7   1884    WS7    8.00000
##  8   1875    WS6   14.80000
##  9   1873    WS5   16.62500
## 10   1872    WS4    4.20000
## # ... with 2,819 more rows

Lọc

Trước khi định thực hiện một thao tác, bạn có thể lọc tập dữ liệu. Tập dữ liệu bắt đầu vào năm 1871 và việc phân tích không cần những năm trước năm 1980.

# Filter
data %>%
	filter(yearID > 1980) %>%
	group_by(yearID) %>%
	summarise(mean_game_year = mean(G))

Code Giải thích

  • filter(yearID > 1980): Lọc dữ liệu để chỉ hiển thị các năm liên quan (tức là sau năm 1980)
  • group_by(yearID): Nhóm theo năm
  • summarise(mean_game_year = Mean(G)): Tóm tắt dữ liệu

Đầu ra:

## # A tibble: 36 x 2
##    yearID mean_game_year
##     <int>          <dbl>
##  1   1981       40.64583
##  2   1982       56.97790
##  3   1983       60.25128
##  4   1984       62.97436
##  5   1985       57.82828
##  6   1986       58.55340
##  7   1987       48.74752
##  8   1988       52.57282
##  9   1989       58.16425
## 10   1990       52.91556
## # ... with 26 more rows

Cuối cùng, bạn phải loại bỏ nhóm.ping trước khi thay đổi cấp độ mà phép tính được thực thi. Nếu không có ungroup(), hàm summarise() thứ hai vẫn sẽ hoạt động cho mỗi người chơi.

# Ungroup the data
data %>%
	filter(HR > 0) %>%
	group_by(playerID) %>%
	summarise(average_HR_game = sum(HR) / sum(G)) %>%
	ungroup() %>%
	summarise(total_average_homerun = mean(average_HR_game))

Code Giải thích

  • filter(HR >0) : Loại trừ zero homerun
  • group_by(playerID): nhóm theo người chơi
  • tóm tắt(average_HR_game = sum(HR)/sum(G)): Tính homerun trung bình của người chơi
  • ungroup(): xóa nhómping
  • summarise(total_average_homerun =mean(average_HR_game)): Tóm tắt dữ liệu

Đầu ra:

## # A tibble: 1 x 1
##   total_average_homerun
##                   <dbl>
## 1            0.06882226	

Cách tóm tắt nhiều cột bằng hàm across()

Mỗi ví dụ trên đều nêu tên một cột tại một thời điểm. Khi cần cùng một thống kê cho nhiều cột, hàm across() sẽ áp dụng thống kê đó cho tất cả các cột trong một lần gọi duy nhất.

# One function, several columns
data %>%
    group_by(lgID) %>%
    summarise(across(c(R, HR, G), mean, .names = "mean_{.col}"))

# Every numeric column at once
data %>%
    group_by(lgID) %>%
    summarise(across(where(is.numeric), mean, na.rm = TRUE))

# Several functions applied to several columns
data %>%
    group_by(teamID) %>%
    summarise(across(c(R, HR), list(avg = mean, total = sum)))

Ba yếu tố chi phối hành vi:

  • .cols: các cột cần thao tác, được viết bằng các hàm hỗ trợ tương tự như select(), bao gồm cả where(is.numeric).
  • .fns: một hàm duy nhất, hoặc một danh sách các hàm được đặt tên để áp dụng cho từng cột.
  • .tên: mẫu đặt tên cho kết quả đầu ra, trong đó {.col} là tên cột và {.fn} là tên hàm.

Hàm across() đã thay thế các hàm trợ giúp cũ hơn như summarise_all(), summarise_at() và summarise_if() trong dplyr 1.0.0. Các hàm đó vẫn chạy nhưng đã bị thay thế, vì vậy mã mới nên sử dụng across().

Các lỗi thường gặp khi sử dụng hàm summarise() và cách khắc phục chúng.

Bốn vấn đề chính là nguyên nhân dẫn đến hầu hết các lần tổng hợp thất bại.

  • Kết quả là NA. Các hàm mean() và sum() trả về NA nếu thiếu bất kỳ giá trị nào. Thêm na.rm = TRUE, như ví dụ mean_SH ở trên đã làm.
  • Thông báo “summarise() có kết quả được nhóm lại”. Nhómping Việc nhóm hai biến lại với nhau sẽ tạo ra kết quả dựa trên biến đầu tiên. Sử dụng `.groups = “drop”` để loại bỏ nhóm.pinghoặc gọi hàm ungroup() sau đó.
  • Phép tính sau đó cho ra kết quả mức độ không chính xác. Khung dữ liệu vẫn được nhóm cho đến khi bạn bỏ nhóm, vì vậy hàm summarise() thứ hai vẫn chạy cho mỗi nhóm. Đây chính xác là điều mà ví dụ ungroup() minh họa.
  • Kết quả đầu ra có nhiều hàng hơn dự kiến. Hàm summarise() trả về một hàng cho mỗi nhóm, vì vậy một nhóm không mong muốn sẽ...ping Biến này nhân với kết quả đầu ra. Hãy kiểm tra dòng “Groups:” được in phía trên bất kỳ tibble nào.
# Drop the grouping as part of the call
data %>%
    group_by(yearID, teamID) %>%
    summarise(mean_games = mean(G), .groups = "drop")

Hàm summarise() trong R: Tham khảo hàm

Để trả về bản tóm tắt theo nhóm, trước tiên hãy chia dữ liệu:

# group by X1, X2, X3
group_by(df, X1, X2, X3)

và loại bỏ nhómping khi mức độ tính toán thay đổi:

ungroup(df)

Bảng dưới đây liệt kê tất cả các hàm được sử dụng với summarise() trong hướng dẫn này:

Phương pháp Chức năng Code
nghĩa là nghĩa là
summarise(df, mean_x1 = mean(x1))
trung vị trung vị
summarise(df, median_x1 = median(x1))
tổng hợp tổng hợp
summarise(df, sum_x1 = sum(x1))
độ lệch chuẩn sd
summarise(df, sd_x1 = sd(x1))
tứ phân vị I.Q.R.
summarise(df, interquartile_x1 = IQR(x1))
tối thiểu phút
summarise(df, minimum_x1 = min(x1))
tối đa tối đa
summarise(df, maximum_x1 = max(x1))
lượng tử lượng tử
summarise(df, quantile_x1 = quantile(x1, probs = 0.75))
quan sát đầu tiên Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên
summarise(df, first_x1 = first(x1))
quan sát cuối cùng cuối cùng
summarise(df, last_x1 = last(x1))
quan sát thứ n thứ n
summarise(df, nth_x1 = nth(x1, 2))
số lần xuất hiện n
summarise(df, n_x1 = n())
số lần xuất hiện khác biệt n_khác biệt
summarise(df, n_distinct_x1 = n_distinct(x1))

Câu Hỏi Thường Gặp

Hàm `summarise()` thu gọn mỗi nhóm thành một hàng thống kê duy nhất. Hàm `mutate()` giữ nguyên mọi hàng và thêm một cột mới. Sử dụng `mutate()` khi thống kê nhóm phải nằm cạnh các quan sát ban đầu.

Nhómping Việc sử dụng hai hoặc nhiều biến sẽ khiến kết quả được nhóm theo tất cả các biến trừ biến cuối cùng. dplyr sẽ cảnh báo bạn vì các động từ sau đó sẽ âm thầm chạy theo từng nhóm. Hãy truyền .groups = “drop” để tránh điều này.

Hàm n() đếm mọi hàng trong nhóm hiện tại, bao gồm cả các hàng lặp lại. Hàm n_distinct() đếm các giá trị duy nhất trong một cột. Việc đếm số lượng cầu thủ mỗi đội cần sử dụng n_distinct(), vì một cầu thủ xuất hiện trong nhiều mùa giải.

Các chỉ số tổng hợp cấp nhóm như giá trị trung bình của khách hàng, số lượng và giá trị gần đây là một trong những yếu tố dự đoán mạnh nhất trong các mô hình AI dạng bảng. Sử dụng hàm group_by() kết hợp với summarise() là cách chuẩn để xây dựng chúng một cách nhất quán.

Đúng vậy. Trợ lý AI có thể viết lại các hàm aggregate() và tapply() thành các pipeline group_by() và summarise(). Hãy so sánh số lượng hàng trong cả hai phiên bản, vì R cơ bản và dplyr xử lý các nhóm bị thiếu theo cách khác nhau.

Tóm tắt bài viết này với: