dplyr
trong hệ hệ sinh thái tidyverse
tidyverse
Tidyverse: https://www.tidyverse.org/
Gói dplyr: https://dplyr.tidyverse.org/
dplyr
là xử lý bảng (data frame)dplyr
trong RCài đặt install.packages("dplyr")
Gọi vào R library(dplyr)
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
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)
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/
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()
)