Gói dplyr trong hệ hệ sinh thái tidyverse

Trang chủ của tidyverse

Tidyverse: https://www.tidyverse.org/

Gói dplyr: https://dplyr.tidyverse.org/

Thế mạnh của dplyr là xử lý bảng (data frame)

Cài đặt và gọi dplyr trong R

Cài đặt install.packages("dplyr")

Gọi vào R library(dplyr)

Các hàm thông dụng của dplyr

5 hàm có tên là 5 động từ động từ.

Tham số đầu tiên luôn là bảng.

Đầu vào là bảng, đầu ra cũng là bảng

mutate() : thêm một cột vào phía bên phải của bảng có sẵn

select() : chọn các cột của bảng dựa vào tên của cột

filter() : chọn các dòng của bảng dựa vào (các) giá trị của bên trong dòng

arrange() : sắp xếp thứ tự của các dòng trong bảng

summarise() : (khi kết hợp với group_by()) thực hiện thống kê mô tả trên bảng

Cho data chui “ống cống” (piping)

Ai học tin học văn phòng cũng ngán với các thể loại hàm của Excel, hàm lồng hàm, biến lồng biến. Chỉ cần đóng ngoặt sai chỗ là lỗi, sửa lại cũng tốn khá nhiều thời gian.

Pipiping là cách cho dữ liệu đầu ra của câu lệnh trước đó trở thành đầu vào của câu lệnh tiếp theo mà không cần đặt một biến tạm.

Cú pháp của piping: %>% (nhìn giống giống như mũi tên)

RStudio Cloud

Nếu bạn muốn vọc R mà không muốn cài đặt R và RStudio vô máy thì bạn có thể thử RStudio Cloud.

Trang chủ: https://rstudio.cloud/

Script được sử dụng trong clip

library(dplyr)

# nhập dữ liệ từ file <tips.csv> và bảng có tên là <df>
df <- read.csv("tips.csv", header = TRUE)
dim(df)
head(df)

# paid_amount = total_bill + tip
# thêm cột paid_amount và cuối bảng bằng lên mutate()
df <- mutate(df, paid_amount = total_bill + tip)
head(df)

# chỉ quan tâm đến paid_amout biến động theo các ngày trong tuần
bangMoi1 <- select(df, paid_amount, day)
head(bangMoi1)

# không quan tâm giới tính
bangMoi2 <- select(df, -sex)
head(bangMoi2)


# lựa ra các bill trên 50 đồng
khachSop <- filter(df, paid_amount > 50)
print(khachSop)

# săp xếp lại bảng khachSop theo thứ tự paid_amount 
# tăng dần
khachSop <- arrange(khachSop, paid_amount)
print(khachSop)
# giảm dần
khachSop <- arrange(khachSop, desc(paid_amount))
print(khachSop)

# tổng thu nhập và số lượng khách trong cả tuần
summarise(df, tongThuNhap = sum(paid_amount), soLuongKhach = n())

# ttổng thu nhập và số lượng khách theo từng ngày trong tuần
# không dùng piping %>%
grouped.df <- group_by(df, day)
summarise(grouped.df,
          tongThuNhap = sum(paid_amount),
          soLuongKhach = n()
)

# có dùng piping %>%
df %>%
    group_by(day) %>%
    summarise(tongThuNhap = sum(paid_amount),
              soLuongKhach = n()
    )