R Chức năng Tổng hợp: Tóm tắt & Ví dụ về Group_by ()

Mục lục:

Anonim

Tóm tắt một biến là điều quan trọng để có một ý tưởng về dữ liệu. Mặc dù, tóm tắt một biến theo nhóm cung cấp thông tin tốt hơn về việc phân phối dữ liệu.

Trong hướng dẫn này, bạn sẽ học cách tóm tắt tập dữ liệu theo nhóm với thư viện dplyr.

Trong hướng dẫn này, bạn sẽ học

  • Tóm tắt ()
  • Group_by so với không group_by
  • Hàm trong Summary ()
  • Chức năng cơ bản
  • Thiết lập con
  • Tổng
  • Độ lệch chuẩn
  • Tối thiểu và tối đa
  • Đếm
  • Đầu tiên và cuối cùng
  • quan sát thứ n
  • Nhiều nhóm
  • Bộ lọc
  • Bỏ nhóm

Đối với hướng dẫn này, bạn sẽ sử dụng tập dữ liệu đánh bóng. Tập dữ liệu ban đầu chứa 102816 quan sát và 22 biến. Bạn sẽ chỉ sử dụng 20 phần trăm của tập dữ liệu này và sử dụng các biến sau:

  • playerID: Mã ID người chơi. Hệ số
  • yearID: Năm. Hệ số
  • teamID: Đội ngũ. hệ số
  • lgID: Liên minh. Yếu tố: AA AL FL NL PL UA
  • AB: Tại dơi. Số
  • G: Trò chơi: số trò chơi của một người chơi. Số
  • R: Chạy. Số
  • Nhân sự: Homeruns. Số
  • SH: Những cú đánh 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 có liên quan
  • Bước 3: Sắp xếp dữ liệu
library(dplyr)# Step 1data <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/lahman-batting.csv") %> %# Step 2select(c(playerID, yearID, AB, teamID, lgID, G, R, HR, SH)) %> %# Step 3arrange(playerID, teamID, yearID)

Một phương pháp hay khi bạn nhập một tập dữ liệu là sử dụng hàm thoáng () để có ý tưởng về cấu trúc của tập dữ liệu.

# Structure of the dataglimpse(data)

Đầu ra:

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

Giải thích mã

  • Summary (data, 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 các 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))

Giải thích mã

  • mean_SH = mean (SH, na.rm = TRUE): Tóm tắt một biến thứ hai. 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 group_by

Hàm summerise () không có group_by () không có ý nghĩa gì. Nó tạo ra thống kê tóm tắt theo nhóm. Thư viện dplyr áp dụng một hàm tự động cho nhóm bạn đã chuyển vào bên trong group_by động từ.

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ẽ thuận tiện để sử dụng nhà điều hành đường ống khi bạn có nhiều hơn một bước. Bạn có thể tính toán lượng homerun trung bình theo giải đấu bóng chày.

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

Giải thích mã

  • dữ liệu: Tập dữ liệu được sử dụng để xây dựng thống kê tóm tắt
  • group_by (lgID): Tính toán tóm tắt bằng cách nhóm biến `lgID
  • Tóm tắt (mean_run = mean (HR)): Tính toán lượng homerun trung bình

Đầu ra:

### A tibble: 7 x 2## lgID mean_run##  ## 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  0.2867133

Toán tử đường ống cũng hoạt động với ggplot (). Bạn có thể dễ dàng hiển thị thống kê tóm tắt bằng biểu đồ. Tất cả các bước được đẩy vào bên trong đường ống cho đến khi đồ thị được vẽ. Có vẻ trực quan hơn khi xem homerun trung bình theo giải đấu với một biểu tượng thanh. Đoạn mã dưới đây thể hiện sức mạnh của việc kết hợp group_by (), Summary () và ggplot () với nhau.

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

  • Bước 1: Chọn khung dữ liệu
  • Bước 2: Nhóm dữ liệu
  • Bước 3: Tổng hợp dữ liệu
  • Bước 4: Vẽ biểu đồ thống kê tóm tắt
library(ggplot2)# Step 1data % > %#Step 2group_by(lgID) % > %#Step 3summarise(mean_home_run = mean(HR)) % > %#Step 4ggplot(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:

Hàm trong Summary ()

Động từ Summary () tương thích với hầu hết 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 Summary ():

Mục tiêu Chức năng Sự miêu tả
Căn bản nghĩa là() Trung bình của vectơ x
Trung bình() Trung vị của vectơ x
Tổng() Tổng của vectơ x
biến thể sd () độ lệch chuẩn của vectơ x
IQR () Phần tư của vectơ x
Phạm vi min () Tối thiểu của vectơ x
max () Tối đa của vectơ x
quantile () 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 (). Lần quan sát cuối cùng của nhóm
nth () 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_distinction () Sử dụng với group_by (). Đếm số lượng các quan sát riêng biệt

Chúng ta sẽ xem các ví dụ cho mọi hàm của bảng 1.

Chức năng cơ bản

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

Bạn có thể tiến hành theo hai bước để tạo khung ngày từ bản tóm tắt:

  • 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 thẳng

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

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

Giải thích mã

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

Đầu ra:

## # A tibble: 6 x 2## yearID mean_game_year##  ## 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ị thống kê tóm tắt bằng biểu đồ đường và xem xu hướng.

# Plot the graphggplot(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:

Thiết lập con

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

## Subsetting + Mediandata % > %group_by(lgID) % > %summarise(median_at_bat_league = median(AB),#Compute the median without the zeromedian_at_bat_league_no_zero = median(AB[AB > 0]))

Giải thích mã

  • median_at_bat_league_no_zero = median (AB [AB> 0]): Biến AB chứa rất nhiều 0. Bạn có thể so sánh trung vị của biến at bat với và không với 0.

Đầu ra:

## # A tibble: 7 x 3## lgID median_at_bat_league median_at_bat_league_no_zero##   ## 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  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 giải đấu nào có nhiều homeruns hơn.

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

Đầu ra:

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

Độ lệch chuẩn

Spread trong dữ liệu được tính với độ lệch chuẩn hoặc sd () trong R.

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

Đầu ra:

## # A tibble: 148 x 2## teamID sd_at_bat_league##  ## 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

Có rất nhiều bất bình đẳng về số lượng homerun được thực hiện bởi mỗi đội.

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

Bạn có thể truy cập giá trị nhỏ nhất và giá trị lớn nhất của một vectơ với hàm min () và max ().

Đoạn mã dưới đây trả về số trò chơi thấp nhất và cao nhất trong một mùa do một người chơi chơi.

# Min and maxdata % > %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##  ## 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

Đếm số quan sát theo nhóm luôn là một ý kiến ​​hay. Với R, bạn có thể tính tổng số lần xuất hiện với n ().

Ví dụ, đoạn mã dưới đây tính số năm chơi của mỗi người chơi.

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

Đầu ra:

## # A tibble: 10,395 x 2## playerID number_year##  ## 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 lastdata % > %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##   ## 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

Fnction nth () bổ sung cho first () và last (). Bạn có thể truy cập quan sát thứ n trong một nhóm có chỉ mục để trả về.

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

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

Đầu ra:

## # A tibble: 148 x 2## teamID second_game##  ## 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ố lượng quan sát trong một nhóm hiện tại. Một hàm đóng đối với n () là n_distinction (), hàm này đếm số 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 được trong tất cả các thời kỳ.

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

Giải thích mã

  • group_by (teamID): Nhóm theo năm nhóm
  • Summary (number_player = n_distinction (playerID)): Đếm số lượng người chơi riêng biệt theo đội
  • sắp xếp (desc (number_player)): Sắp xếp dữ liệu theo số lượng trình phát

Đầu ra:

## # A tibble: 148 x 2## teamID number_player##  ## 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 groupsdata % > %group_by(yearID, teamID) % > %summarise(mean_games = mean(G)) % > %arrange(desc(teamID, yearID))

Giải thích mã

  • group_by (yearID, teamID): Nhóm theo năm nhóm
  • Summary (mean_games = mean (G)): Tổng kết số lượng người chơi trò 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##   ## 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 

Bộ 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. Bộ dữ liệu bắt đầu từ năm 1871 và việc phân tích không cần những năm trước 1980.

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

Giải thích mã

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

Đầu ra:

## # A tibble: 36 x 2## yearID mean_game_year##  ## 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

Bỏ nhóm

Cuối cùng nhưng không kém phần quan trọng, bạn cần xóa nhóm trước khi muốn thay đổi mức độ tính toán.

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

Giải thích mã

  • bộ lọc (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 toán lượng homerun trung bình của người chơi
  • ungroup (): xóa nhóm
  • Summary (total_average_homerun = mean (Average_HR_game)): Tóm tắt dữ liệu

Đầu ra:

## # A tibble: 1 x 1## total_average_homerun## ## 1 0.06882226

Tóm lược

Khi bạn muốn trả lại bản tóm tắt theo nhóm, bạn có thể sử dụng:

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

bạn cần hủy nhóm dữ liệu với:

ungroup(df) 

Bảng dưới đây tóm tắt hàm mà bạn đã học được với Summary ()

phương pháp

chức năng

nghĩa là

nghĩa là

summarise(df,mean_x1 = mean(x1))

Trung bình

Trung bình

summarise(df,median_x1 = median(x1))

Tổng

Tổng

summarise(df,sum_x1 = sum(x1))

độ lệch chuẩn

sd

summarise(df,sd_x1 = sd(x1))

tứ phân vị

IQR

summarise(df,interquartile_x1 = IQR(x1))

tối thiểu

min

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))

quan sát đầu tiên

Đầ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(x1))

số lần xuất hiện riêng biệt

n_distinction

summarise(df,n_distinct _x1 = n_distinct(x1))