library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data("airquality")
head(airquality)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
# Trong khi filter () đặt con một khung dữ liệu theo hàng, select () trả về một tập con gồm các cột.
# Hàm này có thể lấy tên cột (ngay cả khi không có dấu ngoặc kép) hoặc số vị trí cột bắt đầu từ bên trái.
# Hơn nữa, không giống như thư viện base trong R, các lệnh trong dấu ngoặc trong select () không cần phải được nối bằng c ().
select(airquality, Ozone, Temp) %>% head(4)
## Ozone Temp
## 1 41 67
## 2 36 72
## 3 12 74
## 4 18 62
airquality %>% select(-Ozone, -Temp) %>% head(4)
## Solar.R Wind Month Day
## 1 190 7.4 5 1
## 2 118 8.0 5 2
## 3 149 12.6 5 3
## 4 313 11.5 5 4
# Hàm này có tác dụng lọc dữ liệu, kết quả của nó trả về các dữ liệu thỏa mãn một điều kiện nào đó, thông thường hàm filter sẽ lọc dữ liệu theo dòng (lọc theo quan sát-observation)
filter(airquality, Ozone > 106) %>% head(5)
## Ozone Solar.R Wind Temp Month Day
## 1 115 223 5.7 79 5 30
## 2 135 269 4.1 84 7 1
## 3 108 223 8.0 85 7 25
## 4 122 255 4.0 89 8 7
## 5 110 207 8.0 90 8 9
filter(airquality, Ozone > 106 & Month == 8) %>% head(5)
## Ozone Solar.R Wind Temp Month Day
## 1 122 255 4.0 89 8 7
## 2 110 207 8.0 90 8 9
## 3 168 238 3.4 81 8 25
## 4 118 225 2.3 94 8 29
filter(airquality, Ozone > 106, Month == 8, Wind > 7) %>% head(5)
## Ozone Solar.R Wind Temp Month Day
## 1 110 207 8 90 8 9
#Hàm mutate có tác dụng tạo thêm một cột biến mới thỏa mãn một điều kiện nào đó hoặc đơn thuần là tạo ra cột biến mới dựa theo một công thức tính toán nào đó. Ví dụ: Chúng ta muốn thêm một cột biến mới,hiển thị nhiệt độ theo độ C trong bộ dữ liệu airquality
mutate(airquality, temp.celsius = Temp - 31) %>% head(5)
## Ozone Solar.R Wind Temp Month Day temp.celsius
## 1 41 190 7.4 67 5 1 36
## 2 36 118 8.0 72 5 2 41
## 3 12 149 12.6 74 5 3 43
## 4 18 313 11.5 62 5 4 31
## 5 NA NA 14.3 56 5 5 25
# Hàm summarize giúp khái quát thống kê, đơn thuần là tổng kết nhiều giá trị nào đó trở thành một giá trị.
# Hàm này thông thường kết hợp với hàm sắp xếp theo nhóm, tạo ra sức mạnh thống kê khá tuyệt vời. Ví dụ: Chúng ta muốn nhóm các dữ liệu theo các tháng thành các nhóm, sau đó tính trung bình nhiệt độ theo các tháng để so sánh
summarize(group_by(airquality, Month), round(mean(Temp, na.rm = T)))
## # A tibble: 5 × 2
## Month `round(mean(Temp, na.rm = T))`
## <int> <dbl>
## 1 5 66
## 2 6 79
## 3 7 84
## 4 8 84
## 5 9 77
# Hàm này có tác dụng lấy ngẫu nhiên từ bộ dữ liệu ra bao nhiêu quan sát, có thể lấy theo số lượng hoặc lấy theo %. Ví dụ:
sample_n(airquality, 4) # Lấy ngẫu nhiên 4#
## Ozone Solar.R Wind Temp Month Day
## 1 52 82 12.0 86 7 27
## 2 NA 266 14.9 58 5 26
## 3 108 223 8.0 85 7 25
## 4 18 131 8.0 76 9 29
sample_frac(airquality, size = 0.02) # Lấy ngẫu nhiên 2%
## Ozone Solar.R Wind Temp Month Day
## 1 28 238 6.3 77 9 13
## 2 115 223 5.7 79 5 30
## 3 NA 153 5.7 88 8 27
# Hàm count có tác dụng thống kê số lượng. Chức năng của hàm này hoàn toàn giống như tác dụng của hàm table() khi chúng ta cần thống kê số lượng cho các biến phân loại. Ví dụ: Muốn đếm số lượng Nam hoặc Nữ cho một tập dữ liệu gồm 100 quan sát chẳng hạn, với ví dụ airquality:
count(airquality, Month > 5)
## Month > 5 n
## 1 FALSE 31
## 2 TRUE 122
count(airquality, Month) # Thống kê theo thán
## Month n
## 1 5 31
## 2 6 30
## 3 7 31
## 4 8 31
## 5 9 30
# Hàm arrange() được sử dụng để sắp xếp các hàng theo các biến. Hiện tại, tập dữ liệu airquality được sắp xếp dựa trên Tháng và sau đó là Ngày. Chúng ta có thể sử dụng chức năng sắp xếp để sắp xếp các hàng theo thứ tự giảm dần của Tháng, và sau đó theo thứ tự tăng dần của Ngày.
arrange(airquality, Month, Day) %>% head(5) # mặc định là ascending- tăng dần
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
arrange(airquality, desc(Month), Day) %>% head(5) # để sắp giảm dần, dùng desc (tức descending)
## Ozone Solar.R Wind Temp Month Day
## 1 96 167 6.9 91 9 1
## 2 78 197 5.1 92 9 2
## 3 73 183 2.8 93 9 3
## 4 91 189 4.6 93 9 4
## 5 47 95 7.4 87 9 5
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.2
mpg
## # A tibble: 234 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto… f 18 29 p comp…
## 2 audi a4 1.8 1999 4 manu… f 21 29 p comp…
## 3 audi a4 2 2008 4 manu… f 20 31 p comp…
## 4 audi a4 2 2008 4 auto… f 21 30 p comp…
## 5 audi a4 2.8 1999 6 auto… f 16 26 p comp…
## 6 audi a4 2.8 1999 6 manu… f 18 26 p comp…
## 7 audi a4 3.1 2008 6 auto… f 18 27 p comp…
## 8 audi a4 quattro 1.8 1999 4 manu… 4 18 26 p comp…
## 9 audi a4 quattro 1.8 1999 4 auto… 4 16 25 p comp…
## 10 audi a4 quattro 2 2008 4 manu… 4 20 28 p comp…
## # … with 224 more rows
# contains () là một hàm trợ giúp được sử dụng với select (), tương tự với hàm tìm chuỗi str_detect () được sử dụng với filter (). contains () cũng hữu ích để chọn tất cả các tên cột có một ký tự nhất định.
# Ví dụ để chỉ chọn các cột có tên chứa chữ cái y:
mpg_df <- mpg
mpg_df %>% select(contains("y")) %>% head(4)
## # A tibble: 4 × 4
## year cyl cty hwy
## <int> <int> <int> <int>
## 1 1999 4 18 29
## 2 1999 4 21 29
## 3 2008 4 20 31
## 4 2008 4 21 30
# start_with () và end_with () cung cấp tính năng lựa chọn cụ thể hơn so với select (). Nếu chúng ta muốn tất cả các cột bắt đầu bằng chữ cái c:
mpg_df %>% select(starts_with('c')) %>% head(4)
## # A tibble: 4 × 3
## cyl cty class
## <int> <int> <chr>
## 1 4 18 compact
## 2 4 21 compact
## 3 4 20 compact
## 4 4 21 compact
mpg_df %>% select( 2, 1, class, contains('y')) %>% head(4)
## # A tibble: 4 × 7
## model manufacturer class year cyl cty hwy
## <chr> <chr> <chr> <int> <int> <int> <int>
## 1 a4 audi compact 1999 4 18 29
## 2 a4 audi compact 1999 4 21 29
## 3 a4 audi compact 2008 4 20 31
## 4 a4 audi compact 2008 4 21 30
# Một hàm trợ giúp rất hữu ích là hàm everything (), trả về tất cả các tên cột chưa được chỉ định. Nó thường được sử dụng khi sắp xếp lại thứ tự tất cả các cột trong khung dữ liệu:
mpg_df %>% select(class,displ,year,everything()) %>% head(4)
## # A tibble: 4 × 11
## class displ year manufacturer model cyl trans drv cty hwy fl
## <chr> <dbl> <int> <chr> <chr> <int> <chr> <chr> <int> <int> <chr>
## 1 compact 1.8 1999 audi a4 4 auto(l5) f 18 29 p
## 2 compact 1.8 1999 audi a4 4 manual(m… f 21 29 p
## 3 compact 2 2008 audi a4 4 manual(m… f 20 31 p
## 4 compact 2 2008 audi a4 4 auto(av) f 21 30 p
Đây là dạng pipe thông dụng nhất. Công dụng của %>% là chuyển toàn bộ kết quả của hàm đi trước (bên trái) thành dữ liệu đầu vào của hàm đi sau (bên phải) trong một chuỗi quy trình. Kết quả sau cùng là của hàm cuối cùng (bên phải) trong chuỗi. Như vậy toán tử %>% có tính chất 1 chiều và định hướng từ trái sang phải. Có thể hình dung về một dòng chảy của data qua một đường ống (pipe)
# Forward pipe
rnorm(100,20,5)%>%
matrix(ncol=2)%>%
data.frame(x=.[,1],y=.[,2])%>%
plot(col="blue")
### Toán tử T pipe %T>%
# Toán tử T pipe có thể được hình dung như 1 ống nước hình chữ T, khiến cho dữ liệu đầu vào của 1 hàm A đi trước sẽ được truyền cho 2 nhánh tương ứng với quy trình B1 (là 1 hàm) và quy trình B2. Một ứng dụng phổ biến nhất của T pipe là để vẽ 2 đồ thị khác nhau cho cùng 1 gói dữ liệu
# T pipe
rnorm(100,10,1)%T>%
ts.plot(col="red")%>%
density()%>%
plot(col="blue","densityplot")
### Toán tử Assigning pipe
# cho phép trích xuất đích danh một đối tượng trong kết quả của hàm đi trước để sử dụng như dữ liệu đầu vào cho hàm đi sau.
# nó có tính định hướng 1 chiều nhưng chuyên biệt, để sử dụng toán tử này được, cần sử dụng thư viện magrittr.
library(magrittr)
data.frame(x=rnorm(100,10,5),
y=rnorm(100,20,5)) %$% ts.plot(x,col="red")
data.frame(x=rnorm(100,10,5),
y=rnorm(100,20,5)) %$% ts.plot(y,col="blue")
### Toán tử Backward pipe
# backward pipe trái chiều với forward pipe, tức là kết quả cuối cùng sau mọi quy trình bên phải trong chuỗi sẽ được truyền ngược về object đầu tiên nằm ngoài cùng bên trái của chuỗi.
library(magrittr)
x=abs(rnorm(100))
y=x
cbind(x,y)%>%head()
## x y
## [1,] 1.2481876 1.2481876
## [2,] 0.6093737 0.6093737
## [3,] 2.3901770 2.3901770
## [4,] 1.6375308 1.6375308
## [5,] 0.5215872 0.5215872
## [6,] 1.0106545 1.0106545
x %<>% .^2 %>% sqrt()
x==y
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.2
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ tibble 3.1.8 ✔ purrr 1.0.1
## ✔ tidyr 1.3.0 ✔ stringr 1.5.0
## ✔ readr 2.1.3 ✔ forcats 1.0.0
## Warning: package 'tibble' was built under R version 4.2.2
## Warning: package 'tidyr' was built under R version 4.2.2
## Warning: package 'readr' was built under R version 4.2.2
## Warning: package 'purrr' was built under R version 4.2.2
## Warning: package 'stringr' was built under R version 4.2.2
## Warning: package 'forcats' was built under R version 4.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::extract() masks magrittr::extract()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ purrr::set_names() masks magrittr::set_names()
library(dplyr)
mpg_df <- mpg
# filter the mpg_df data for cars manufactured in the year 1999
filter(mpg_df, year == 1999) %>% head(5)
## # A tibble: 5 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto(… f 18 29 p comp…
## 2 audi a4 1.8 1999 4 manua… f 21 29 p comp…
## 3 audi a4 2.8 1999 6 auto(… f 16 26 p comp…
## 4 audi a4 2.8 1999 6 manua… f 18 26 p comp…
## 5 audi a4 quattro 1.8 1999 4 manua… 4 18 26 p comp…
# Show the dimension
filter(mpg_df, year == 1999) %>% dim()
## [1] 117 11
# let’s take all vehicles in the ‘midsize’ class:
filter(mpg_df, class == "midsize") %>% head(5)
## # A tibble: 5 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a6 quattro 2.8 1999 6 auto(… 4 15 24 p mids…
## 2 audi a6 quattro 3.1 2008 6 auto(… 4 17 25 p mids…
## 3 audi a6 quattro 4.2 2008 8 auto(… 4 16 23 p mids…
## 4 chevrolet malibu 2.4 1999 4 auto(… f 19 27 r mids…
## 5 chevrolet malibu 2.4 2008 4 auto(… f 22 30 r mids…
# filter for vehicles built in 1999 and with mileage in the city (cty) greater than 18.
mpg_df %>% filter(year==1999 & cty > 18) %>% head(4)
## # A tibble: 4 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 manual(m5) f 21 29 p comp…
## 2 chevrolet malibu 2.4 1999 4 auto(l4) f 19 27 r mids…
## 3 honda civic 1.6 1999 4 manual(m5) f 28 33 r subc…
## 4 honda civic 1.6 1999 4 auto(l4) f 24 32 r subc…
# filter for vehicles (i.e., rows) where the manufacturer is Chevrolet or the class is ‘suv’.
mpg_df %>% filter(manufacturer=='chevrolet' | class=='suv') %>% head(4)
## # A tibble: 4 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 chevrolet c1500 subu… 5.3 2008 8 auto… r 14 20 r suv
## 2 chevrolet c1500 subu… 5.3 2008 8 auto… r 11 15 e suv
## 3 chevrolet c1500 subu… 5.3 2008 8 auto… r 14 20 r suv
## 4 chevrolet c1500 subu… 5.7 1999 8 auto… r 13 17 r suv
mpg_df %>% filter( (manufacturer=='chevrolet' | class=='suv') & hwy < 20) %>% head(4)
## # A tibble: 4 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 chevrolet c1500 subu… 5.3 2008 8 auto… r 11 15 e suv
## 2 chevrolet c1500 subu… 5.7 1999 8 auto… r 13 17 r suv
## 3 chevrolet c1500 subu… 6 2008 8 auto… r 12 17 r suv
## 4 chevrolet k1500 taho… 5.3 2008 8 auto… 4 14 19 r suv
library(tidyverse)
mpg_df %>% filter(str_detect(model,'4wd')) %>% head(5)
## # A tibble: 5 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 chevrolet k1500 taho… 5.3 2008 8 auto… 4 14 19 r suv
## 2 chevrolet k1500 taho… 5.3 2008 8 auto… 4 11 14 e suv
## 3 chevrolet k1500 taho… 5.7 1999 8 auto… 4 11 15 r suv
## 4 chevrolet k1500 taho… 6.5 1999 8 auto… 4 14 17 d suv
## 5 dodge dakota pic… 3.7 2008 6 manu… 4 15 19 r pick…
mpg_df %>% filter(cyl %in% c(4,5,6)) %>% head(5)
## # A tibble: 5 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa…
## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa…
## 3 audi a4 2 2008 4 manual(m6) f 20 31 p compa…
## 4 audi a4 2 2008 4 auto(av) f 21 30 p compa…
## 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa…
mpg %>% filter(is.na(year))
## # A tibble: 0 × 11
## # … with 11 variables: manufacturer <chr>, model <chr>, displ <dbl>,
## # year <int>, cyl <int>, trans <chr>, drv <chr>, cty <int>, hwy <int>,
## # fl <chr>, class <chr>
# Loại bỏ tất cả các giá trị còn thiếu
mpg %>% filter(!is.na(year)) %>% head(4)
## # A tibble: 4 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa…
## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa…
## 3 audi a4 2 2008 4 manual(m6) f 20 31 p compa…
## 4 audi a4 2 2008 4 auto(av) f 21 30 p compa…
# lọc các hàng không có giá trị bị thiếu:
mpg %>% filter(complete.cases(.)) %>% head(4)
## # A tibble: 4 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa…
## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa…
## 3 audi a4 2 2008 4 manual(m6) f 20 31 p compa…
## 4 audi a4 2 2008 4 auto(av) f 21 30 p compa…
# lọc tất cả các hàng có giá trị bị thiếu trong ít nhất một cột:
mpg %>% filter( !complete.cases(.) )
## # A tibble: 0 × 11
## # … with 11 variables: manufacturer <chr>, model <chr>, displ <dbl>,
## # year <int>, cyl <int>, trans <chr>, drv <chr>, cty <int>, hwy <int>,
## # fl <chr>, class <chr>
# Tạo ra một cột biến mới, với giá trị là đô la Úc, biết rằng AUD=USD*1.25
library(ggplot2)
diamonds_df <- diamonds
diamonds_df %>% select(-x, -y, -z) %>% mutate(AUD = price*1.25) %>% head(4)
## # A tibble: 4 × 8
## carat cut color clarity depth table price AUD
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 408.
## 2 0.21 Premium E SI1 59.8 61 326 408.
## 3 0.23 Good E VS1 56.9 65 327 409.
## 4 0.29 Premium I VS2 62.4 58 334 418.
# thêm một cột biến nữa là giá 1 carat bằng cách lấy cột price chia cho cột carat
diamonds_df %>% select(-x, -y , -z) %>% mutate(ppc = price/carat) %>% head(4)
## # A tibble: 4 × 8
## carat cut color clarity depth table price ppc
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 1417.
## 2 0.21 Premium E SI1 59.8 61 326 1552.
## 3 0.23 Good E VS1 56.9 65 327 1422.
## 4 0.29 Premium I VS2 62.4 58 334 1152.
diamonds_df %>% select(-x, -y, -z) %>% mutate(price_label = ifelse(price > 5000, "expensive", "cheap"))
## # A tibble: 53,940 × 8
## carat cut color clarity depth table price price_label
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <chr>
## 1 0.23 Ideal E SI2 61.5 55 326 cheap
## 2 0.21 Premium E SI1 59.8 61 326 cheap
## 3 0.23 Good E VS1 56.9 65 327 cheap
## 4 0.29 Premium I VS2 62.4 58 334 cheap
## 5 0.31 Good J SI2 63.3 58 335 cheap
## 6 0.24 Very Good J VVS2 62.8 57 336 cheap
## 7 0.24 Very Good I VVS1 62.3 57 336 cheap
## 8 0.26 Very Good H SI1 61.9 55 337 cheap
## 9 0.22 Fair E VS2 65.1 61 337 cheap
## 10 0.23 Very Good H VS1 59.4 61 338 cheap
## # … with 53,930 more rows
#
diamonds_df %>% select(-x,-y,-z) %>%
mutate(price_label = ifelse(price > 5000,'expensive','cheap')) %>%
ggplot(aes(x=price, fill = price_label)) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Lệnh case_when() Lệnh case_when() được sử dụng khi chúng ta có nhiều
điều kiện ràng buộc, câu lệnh này được coi là thay thế trong trường hợp
phải dùng quá nhiều ifelse().
diamonds_df %>%
select(clarity) %>%
mutate(clarity_group = case_when(clarity == 'IF' ~ 'flawless',
str_detect(clarity, 'VVS') ~ 'VV_slight',
str_detect(clarity, 'VS') ~ 'V_slight',
str_detect(clarity, 'SI') ~ 'slight',
clarity == 'I1' ~ 'impurity',
TRUE ~ 'other')) %>% head(10)
## # A tibble: 10 × 2
## clarity clarity_group
## <ord> <chr>
## 1 SI2 slight
## 2 SI1 slight
## 3 VS1 V_slight
## 4 VS2 V_slight
## 5 SI2 slight
## 6 VVS2 VV_slight
## 7 VVS1 VV_slight
## 8 SI1 slight
## 9 VS2 V_slight
## 10 VS1 V_slight
diamonds_df %>% summarize(mean_price = mean(price),
sd_price = sd(price),
min_price = min(price),
max_price = max(price),
n_rows = n())
## # A tibble: 1 × 5
## mean_price sd_price min_price max_price n_rows
## <dbl> <dbl> <int> <int> <int>
## 1 3933. 3989. 326 18823 53940
diamonds_df %>% group_by(clarity) %>%
summarize(mean_price = mean(price),
sd_price = sd(price),
min_price = min(price),
max_price = max(price),
n_rows = n()) %>% head(10)
## # A tibble: 8 × 6
## clarity mean_price sd_price min_price max_price n_rows
## <ord> <dbl> <dbl> <int> <int> <int>
## 1 I1 3924. 2807. 345 18531 741
## 2 SI2 5063. 4260. 326 18804 9194
## 3 SI1 3996. 3799. 326 18818 13065
## 4 VS2 3925. 4042. 334 18823 12258
## 5 VS1 3839. 4012. 327 18795 8171
## 6 VVS2 3284. 3822. 336 18768 5066
## 7 VVS1 2523. 3335. 336 18777 3655
## 8 IF 2865. 3920. 369 18806 1790
diamonds_df %>%
group_by(clarity, cut) %>%
summarize(mean_price = mean(price),
sd_price = sd(price),
min_price = min(price),
max_price = max(price),
n_rows = n()) %>% head(10)
## `summarise()` has grouped output by 'clarity'. You can override using the
## `.groups` argument.
## # A tibble: 10 × 7
## # Groups: clarity [2]
## clarity cut mean_price sd_price min_price max_price n_rows
## <ord> <ord> <dbl> <dbl> <int> <int> <int>
## 1 I1 Fair 3704. 3099. 584 18531 210
## 2 I1 Good 3597. 2285. 361 11548 96
## 3 I1 Very Good 4078. 2720. 511 15984 84
## 4 I1 Premium 3947. 2827. 345 16193 205
## 5 I1 Ideal 4336. 2671. 413 16538 146
## 6 SI2 Fair 5174. 3928. 536 18308 466
## 7 SI2 Good 4580. 3901. 335 18788 1081
## 8 SI2 Very Good 4989. 4126. 383 18692 2100
## 9 SI2 Premium 5546. 4488. 345 18784 2949
## 10 SI2 Ideal 4756. 4252. 326 18804 2598
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.