Будуть використовуватись дані diamonds із пакету ggplot2.
library(ggplot2); library(dplyr)
rm(list = ls())
df <- diamonds
head(df)
## Source: local data frame [6 x 10]
##
## carat cut color clarity depth table price x y z
## (dbl) (fctr) (fctr) (fctr) (dbl) (dbl) (int) (dbl) (dbl) (dbl)
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
glimpse(df) # "кинути погляд" на дані (аналог функції str())
## Observations: 53,940
## Variables: 10
## $ carat (dbl) 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, ...
## $ cut (fctr) Ideal, Premium, Good, Premium, Good, Very Good, Very ...
## $ color (fctr) E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J,...
## $ clarity (fctr) SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, S...
## $ depth (dbl) 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, ...
## $ table (dbl) 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54...
## $ price (int) 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339,...
## $ x (dbl) 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, ...
## $ y (dbl) 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, ...
## $ z (dbl) 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, ...
filter() - повертає рядки, які задовільняються відповідному критерію.
Відфільтрувати фрейм, при умові, що змінна cut приймає значення Ideal або Premium:
ans <- filter(df, cut == "Ideal" | cut == "Premium")
unique(ans$cut) # перевірка
## [1] Ideal Premium
## Levels: Fair < Good < Very Good < Premium < Ideal
# ggplot(df,aes(price,fill=cut))+geom_density(alpha=0.5)
Відфільтрувати фрейм, при умові, що змінна cut приймає значення Ideal або Premium, а змінна price - більше 5000:
ans <- filter(df, cut == "Ideal" | cut == "Premium", price > 5000)
unique(ans$cut) # перевірка
## [1] Ideal Premium
## Levels: Fair < Good < Very Good < Premium < Ideal
unique(ans$price > 5000) # перевірка
## [1] TRUE
distinct() - видаляє дублюючі рядки у фреймі (повертає унікальні значення).
Для наглядності, повернути унікальні значення змінної color:
unique(df$color)
## [1] E I J H F G D
## Levels: D < E < F < G < H < I < J
distinct(df, color) # якщо є фрейм, то береться перший рядок підмножини
## Source: local data frame [7 x 10]
##
## carat cut color clarity depth table price x y z
## (dbl) (fctr) (fctr) (fctr) (dbl) (dbl) (int) (dbl) (dbl) (dbl)
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
## 3 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 4 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
## 5 0.22 Premium F SI1 60.4 61 342 3.88 3.84 2.33
## 6 0.23 Very Good G VVS2 60.4 58 354 3.97 4.01 2.41
## 7 0.23 Very Good D VS2 60.5 61 357 3.96 3.97 2.40
df %>% select(color) %>% distinct(color)
## Source: local data frame [7 x 1]
##
## color
## (fctr)
## 1 E
## 2 I
## 3 J
## 4 H
## 5 F
## 6 G
## 7 D
Кількість унікальних значень (застосовується до вектора):
n_distinct(df$color)
## [1] 7
sample_frac() - довільно вибрати частину рядків (replace = T - із повтореннями)
Вибрати 60% рядків без повторів:
ans <- sample_frac(df, size = 0.6, replace = F)
nrow(ans)/nrow(df)
## [1] 0.6
round(prop.table(table(df$cut)), 2)
##
## Fair Good Very Good Premium Ideal
## 0.03 0.09 0.22 0.26 0.40
round(prop.table(table(ans$cut)), 2)
##
## Fair Good Very Good Premium Ideal
## 0.03 0.09 0.23 0.26 0.40
sample_n() - довільно вибрати n рядків.
Вибрати 500 ряків без повторів:
ans <- sample_n(tbl = df, size = 500, replace = F)
nrow(ans)
## [1] 500
slice() - вибрати рядки із вказаними позиціями.
Вибрати рядки:
ind <- sample(x = 1:nrow(df), size = 0.3*nrow(df), replace = F)
head(ind) # вибрали індекси рядків
## [1] 16381 9414 15463 25134 2792 29145
ans <- slice(df, ind) # вибрали рядки
nrow(ans)/nrow(df)
## [1] 0.3
top_n() - вибрати топ n записів.
Вибрати топ 5 записів по полю carat:
top_n(x = df, n = 5, wt = carat)
## Source: local data frame [5 x 10]
##
## carat cut color clarity depth table price x y z
## (dbl) (fctr) (fctr) (fctr) (dbl) (dbl) (int) (dbl) (dbl) (dbl)
## 1 4.01 Premium I I1 61.0 61 15223 10.14 10.10 6.17
## 2 4.01 Premium J I1 62.5 62 15223 10.02 9.94 6.24
## 3 4.13 Fair H I1 64.8 61 17329 10.00 9.85 6.43
## 4 5.01 Fair J I1 65.5 59 18018 10.74 10.54 6.98
## 5 4.50 Fair J I1 65.8 58 18531 10.23 10.16 6.72
Перевірка:
df[order(-df$carat), ] %>% head(., 5)
## Source: local data frame [5 x 10]
##
## carat cut color clarity depth table price x y z
## (dbl) (fctr) (fctr) (fctr) (dbl) (dbl) (int) (dbl) (dbl) (dbl)
## 1 5.01 Fair J I1 65.5 59 18018 10.74 10.54 6.98
## 2 4.50 Fair J I1 65.8 58 18531 10.23 10.16 6.72
## 3 4.13 Fair H I1 64.8 61 17329 10.00 9.85 6.43
## 4 4.01 Premium I I1 61.0 61 15223 10.14 10.10 6.17
## 5 4.01 Premium J I1 62.5 62 15223 10.02 9.94 6.24
select() - вибрати відповідні колонки по імені або за допомогою допоміжних функцій.
Вибрати колонки carat, color, price:
ans <- select(df, carat, color, price)
glimpse(ans)
## Observations: 53,940
## Variables: 3
## $ carat (dbl) 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0....
## $ color (fctr) E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J...
## $ price (int) 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 3...
Використаємо фрейм iris
head(iris, 3)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
Вибрати колонки, які містять текстовий рядок:
ans <- select(iris, contains("."))
head(ans, 3)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 5.1 3.5 1.4 0.2
## 2 4.9 3.0 1.4 0.2
## 3 4.7 3.2 1.3 0.2
Вибрати колонки, які закінчуються на певне текстове значення:
ans <- select(iris, ends_with("Length"))
head(ans, 3)
## Sepal.Length Petal.Length
## 1 5.1 1.4
## 2 4.9 1.4
## 3 4.7 1.3
Вибрати всі колонки:
ans <- select(iris, everything())
head(ans, 3)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
Створимо наступний фрейм:
df.1 <- cbind(rnorm(100), rnorm(100),rnorm(100), rnorm(100),rnorm(100), rnorm(100),rnorm(100), rnorm(100))
colnames(df.1) <- paste("x", 1:ncol(df.1), sep = "")
df.1 <- as.data.frame(df.1)
df.1 %>% glimpse()
## Observations: 100
## Variables: 8
## $ x1 (dbl) -0.15348122, -1.64930622, 0.22918688, 0.83344551, -1.421840...
## $ x2 (dbl) 1.08901393, 2.84465800, -0.79152544, 0.36532931, -0.1845493...
## $ x3 (dbl) 0.92838245, -0.75559791, 0.73795575, 0.66494643, -0.0414391...
## $ x4 (dbl) -1.79603581, 0.19286253, 0.61895873, 0.69806526, -0.8447638...
## $ x5 (dbl) -0.91332541, -0.34975918, -0.25959568, -2.36922849, 0.62304...
## $ x6 (dbl) -0.6583078, -2.4317888, -0.1389960, 1.0973178, -0.4140736, ...
## $ x7 (dbl) 0.19409665, -0.34067849, 0.43226062, -1.54341544, -1.812915...
## $ x8 (dbl) 1.47244465, 2.43506090, -0.65727393, -0.58218684, 0.0711748...
Вибрати колонки х1, х2, х3, х4, х5:
ans <- select(df.1, num_range("x", 1:5))
glimpse(ans)
## Observations: 100
## Variables: 5
## $ x1 (dbl) -0.15348122, -1.64930622, 0.22918688, 0.83344551, -1.421840...
## $ x2 (dbl) 1.08901393, 2.84465800, -0.79152544, 0.36532931, -0.1845493...
## $ x3 (dbl) 0.92838245, -0.75559791, 0.73795575, 0.66494643, -0.0414391...
## $ x4 (dbl) -1.79603581, 0.19286253, 0.61895873, 0.69806526, -0.8447638...
## $ x5 (dbl) -0.91332541, -0.34975918, -0.25959568, -2.36922849, 0.62304...
Вибрати колонки, які починаються із певного текстового значення:
colnames(iris)
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
## [5] "Species"
ans <- select(iris, starts_with("Sepal"))
head(ans, 3)
## Sepal.Length Sepal.Width
## 1 5.1 3.5
## 2 4.9 3.0
## 3 4.7 3.2
Використаємо фрейм df.1. Вибрати всі колонки між х2 і х6:
colnames(df.1)
## [1] "x1" "x2" "x3" "x4" "x5" "x6" "x7" "x8"
ans <- select(df.1, x2:x6)
head(ans, 3)
## x2 x3 x4 x5 x6
## 1 1.0890139 0.9283824 -1.7960358 -0.9133254 -0.6583078
## 2 2.8446580 -0.7555979 0.1928625 -0.3497592 -2.4317888
## 3 -0.7915254 0.7379558 0.6189587 -0.2595957 -0.1389960
Використаємо фрейм df.1. Вибрати всі колонки окрім х2:
ans <- select(df.1, -x2)
colnames(ans)
## [1] "x1" "x3" "x4" "x5" "x6" "x7" "x8"
Вибрати всі колонки окрім х2 і х6:
ans <- select(df.1, -c(x2, x6))
colnames(ans)
## [1] "x1" "x3" "x4" "x5" "x7" "x8"
summarise() - узагальнити дані в один рядок (більш читабельна).
Вивести суму та середнє колонки Sepal.Length в даних iris:
summarise(iris, sum.sl = sum(Sepal.Length), mean.sl = mean(Sepal.Length))
## sum.sl mean.sl
## 1 876.5 5.843333
Вивести суму та середнє колонки Sepal.Length по змінній Species:
iris %>%
group_by(Species) %>%
summarise(sum.sl = sum(Sepal.Length), mean.sl = mean(Sepal.Length))
## Source: local data frame [3 x 3]
##
## Species sum.sl mean.sl
## (fctr) (dbl) (dbl)
## 1 setosa 250.3 5.006
## 2 versicolor 296.8 5.936
## 3 virginica 329.4 6.588
summarise_each() - застосувати функцію до кожного стовбця.
Обчислити суму та середнє колонок Sepal.Length і Sepal.Width:
summarise_each(iris, funs(mean, sum), Sepal.Length, Sepal.Width)
## Sepal.Length_mean Sepal.Width_mean Sepal.Length_sum Sepal.Width_sum
## 1 5.843333 3.057333 876.5 458.6
Обчислити суму та середнє колонок Sepal.Length і Sepal.Width по змінній Species:
iris %>%
group_by(Species) %>%
summarise_each(funs(mean, sum), Sepal.Length, Sepal.Width) %>%
setNames(c("group", "mean.sl", "mean.sw", "sum.sl", "sum.sw"))
## Source: local data frame [3 x 5]
##
## group mean.sl mean.sw sum.sl sum.sw
## (fctr) (dbl) (dbl) (dbl) (dbl)
## 1 setosa 5.006 3.428 250.3 171.4
## 2 versicolor 5.936 2.770 296.8 138.5
## 3 virginica 6.588 2.974 329.4 148.7
mutate() - розрахунок і створення нових змінних.
В даних iris створити нову зміну sepal як суму Sepal.Length і Sepal.Width:
ans <- mutate(iris, sepal = Sepal.Length + Sepal.Width)
glimpse(ans)
## Observations: 150
## Variables: 6
## $ Sepal.Length (dbl) 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9,...
## $ Sepal.Width (dbl) 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1,...
## $ Petal.Length (dbl) 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5,...
## $ Petal.Width (dbl) 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1,...
## $ Species (fctr) setosa, setosa, setosa, setosa, setosa, setosa, ...
## $ sepal (dbl) 8.6, 7.9, 7.9, 7.7, 8.6, 9.3, 8.0, 8.4, 7.3, 8.0,...
Вивести 1-й лаг змінної Sepal.Length:
ans <- iris %>% mutate(Sepal.Length.lag.1 = lag(Sepal.Length, 1))
glimpse(ans)
## Observations: 150
## Variables: 6
## $ Sepal.Length (dbl) 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4...
## $ Sepal.Width (dbl) 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9...
## $ Petal.Length (dbl) 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4...
## $ Petal.Width (dbl) 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2...
## $ Species (fctr) setosa, setosa, setosa, setosa, setosa, se...
## $ Sepal.Length.lag.1 (dbl) NA, 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0,...
Вивести 1-й лаг змінної Sepal.Length по змінній Species (віконна функція):
# виберемо випадково 10% даних
set.seed(1)
ans_frac <- sample_frac(iris, size = 0.1, replace = F) %>%
arrange(Species)
ans <- ans_frac %>%
select(Species, Sepal.Length) %>%
group_by(Species) %>%
mutate(Sepal.Length.lag.1 = lag(Sepal.Length, 1))
ans
## Source: local data frame [15 x 3]
## Groups: Species [3]
##
## Species Sepal.Length Sepal.Length.lag.1
## (fctr) (dbl) (dbl)
## 1 setosa 5.1 NA
## 2 setosa 4.7 5.1
## 3 setosa 4.4 4.7
## 4 setosa 5.2 4.4
## 5 setosa 4.8 5.2
## 6 versicolor 5.7 NA
## 7 versicolor 5.4 5.7
## 8 versicolor 5.6 5.4
## 9 versicolor 5.5 5.6
## 10 versicolor 6.9 5.5
## 11 virginica 6.3 NA
## 12 virginica 7.4 6.3
## 13 virginica 6.3 7.4
## 14 virginica 5.8 6.3
## 15 virginica 6.5 5.8
Вивести 1-е значення “впереді”" змінної Sepal.Length:
ans <- ans_frac %>% mutate(Sepal.Length.lead.1 = lead(Sepal.Length, 1))
ans
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.4 1.5 0.2 setosa
## 2 4.7 3.2 1.6 0.2 setosa
## 3 4.4 2.9 1.4 0.2 setosa
## 4 5.2 3.4 1.4 0.2 setosa
## 5 4.8 3.4 1.9 0.2 setosa
## 6 5.7 2.8 4.5 1.3 versicolor
## 7 5.4 3.0 4.5 1.5 versicolor
## 8 5.6 2.7 4.2 1.3 versicolor
## 9 5.5 2.5 4.0 1.3 versicolor
## 10 6.9 3.1 4.9 1.5 versicolor
## 11 6.3 2.8 5.1 1.5 virginica
## 12 7.4 2.8 6.1 1.9 virginica
## 13 6.3 3.4 5.6 2.4 virginica
## 14 5.8 2.7 5.1 1.9 virginica
## 15 6.5 3.0 5.8 2.2 virginica
## Sepal.Length.lead.1
## 1 4.7
## 2 4.4
## 3 5.2
## 4 4.8
## 5 5.7
## 6 5.4
## 7 5.6
## 8 5.5
## 9 6.9
## 10 6.3
## 11 7.4
## 12 6.3
## 13 5.8
## 14 6.5
## 15 NA
Вивести 1-е значення “впереді”" змінної Sepal.Length по змінній Species (віконна функція):
ans <- ans_frac %>%
select(Species, Sepal.Length) %>%
group_by(Species) %>%
mutate(Sepal.Length.lead.1 = lead(Sepal.Length, 1))
ans
## Source: local data frame [15 x 3]
## Groups: Species [3]
##
## Species Sepal.Length Sepal.Length.lead.1
## (fctr) (dbl) (dbl)
## 1 setosa 5.1 4.7
## 2 setosa 4.7 4.4
## 3 setosa 4.4 5.2
## 4 setosa 5.2 4.8
## 5 setosa 4.8 NA
## 6 versicolor 5.7 5.4
## 7 versicolor 5.4 5.6
## 8 versicolor 5.6 5.5
## 9 versicolor 5.5 6.9
## 10 versicolor 6.9 NA
## 11 virginica 6.3 7.4
## 12 virginica 7.4 6.3
## 13 virginica 6.3 5.8
## 14 virginica 5.8 6.5
## 15 virginica 6.5 NA
dense_rank() - ранг без пропуска.
min_rank() - ранг з пропусками.
percent_rank() - ранг в діапазоні [0, 1].
ans_frac %>%
select(Sepal.Length) %>%
arrange(Sepal.Length) %>%
mutate(min.rank = min_rank(Sepal.Length),
dense.rank = dense_rank(Sepal.Length),
percent_rank = percent_rank(Sepal.Length),
row.number = row_number(Sepal.Length))
## Sepal.Length min.rank dense.rank percent_rank row.number
## 1 4.4 1 1 0.00000000 1
## 2 4.7 2 2 0.07142857 2
## 3 4.8 3 3 0.14285714 3
## 4 5.1 4 4 0.21428571 4
## 5 5.2 5 5 0.28571429 5
## 6 5.4 6 6 0.35714286 6
## 7 5.5 7 7 0.42857143 7
## 8 5.6 8 8 0.50000000 8
## 9 5.7 9 9 0.57142857 9
## 10 5.8 10 10 0.64285714 10
## 11 6.3 11 11 0.71428571 11
## 12 6.3 11 11 0.71428571 12
## 13 6.5 13 12 0.85714286 13
## 14 6.9 14 13 0.92857143 14
## 15 7.4 15 14 1.00000000 15
cumsum() - кумулятивна сума. cummim() - кумулятивний мінімум. cummax() - кумулятивний максимум. cumall() - кумулятивна функція all().
ans_frac %>%
select(Species, Sepal.Length) %>%
mutate(help.value = c(T,T,T,T,T,F,F,F,F,F,T,T,T,T,T)) %>%
group_by(Species) %>%
mutate(cum.sum = cumsum(Sepal.Length),
cum.min = cummin(Sepal.Length),
cum.max = cummax(Sepal.Length),
cum.all = cumall(help.value),
cum.any = cumany(help.value))
## Source: local data frame [15 x 8]
## Groups: Species [3]
##
## Species Sepal.Length help.value cum.sum cum.min cum.max cum.all
## (fctr) (dbl) (lgl) (dbl) (dbl) (dbl) (lgl)
## 1 setosa 5.1 TRUE 5.1 5.1 5.1 TRUE
## 2 setosa 4.7 TRUE 9.8 4.7 5.1 TRUE
## 3 setosa 4.4 TRUE 14.2 4.4 5.1 TRUE
## 4 setosa 5.2 TRUE 19.4 4.4 5.2 TRUE
## 5 setosa 4.8 TRUE 24.2 4.4 5.2 TRUE
## 6 versicolor 5.7 FALSE 5.7 5.7 5.7 FALSE
## 7 versicolor 5.4 FALSE 11.1 5.4 5.7 FALSE
## 8 versicolor 5.6 FALSE 16.7 5.4 5.7 FALSE
## 9 versicolor 5.5 FALSE 22.2 5.4 5.7 FALSE
## 10 versicolor 6.9 FALSE 29.1 5.4 6.9 FALSE
## 11 virginica 6.3 TRUE 6.3 6.3 6.3 TRUE
## 12 virginica 7.4 TRUE 13.7 6.3 7.4 TRUE
## 13 virginica 6.3 TRUE 20.0 6.3 7.4 TRUE
## 14 virginica 5.8 TRUE 25.8 5.8 7.4 TRUE
## 15 virginica 6.5 TRUE 32.3 5.8 7.4 TRUE
## Variables not shown: cum.any (lgl)
Використаємо набір даних mtcars.
df.cars <- mtcars
add_rownames() - конвертувати назви рядків (rownames()) в нову змінну.
Створимо нову змінну, в якій будуть міститись назви рядків:
df.cars <- add_rownames(df.cars, var = "name.of.cars")
head(df.cars, 3)
## Source: local data frame [3 x 12]
##
## name.of.cars mpg cyl disp hp drat wt qsec vs am
## (chr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
## 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1
## 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1
## 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1
## Variables not shown: gear (dbl), carb (dbl)
arrange() - сортування (+desc()).
df.cars %>% arrange(disp)
## Source: local data frame [32 x 12]
##
## name.of.cars mpg cyl disp hp drat wt qsec vs am
## (chr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
## 1 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1
## 2 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1
## 3 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1
## 4 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1
## 5 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1
## 6 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1
## 7 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0
## 8 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1
## 9 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1
## 10 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0
## .. ... ... ... ... ... ... ... ... ... ...
## Variables not shown: gear (dbl), carb (dbl)
df.cars %>% arrange(desc(disp))
## Source: local data frame [32 x 12]
##
## name.of.cars mpg cyl disp hp drat wt qsec vs
## (chr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
## 1 Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0
## 2 Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0
## 3 Chrysler Imperial 14.7 8 440 230 3.23 5.345 17.42 0
## 4 Pontiac Firebird 19.2 8 400 175 3.08 3.845 17.05 0
## 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0
## 6 Duster 360 14.3 8 360 245 3.21 3.570 15.84 0
## 7 Ford Pantera L 15.8 8 351 264 4.22 3.170 14.50 0
## 8 Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0
## 9 Dodge Challenger 15.5 8 318 150 2.76 3.520 16.87 0
## 10 AMC Javelin 15.2 8 304 150 3.15 3.435 17.30 0
## .. ... ... ... ... ... ... ... ... ...
## Variables not shown: am (dbl), gear (dbl), carb (dbl)
between() - чи попадає числовий вектор в заданий діапазон.
df.cars$disp %>% between(100, 200)
## [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## [23] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
df.cars[between(df.cars$disp, 100, 200), ]
## Source: local data frame [11 x 12]
##
## name.of.cars mpg cyl disp hp drat wt qsec vs am
## (chr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
## 1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1
## 2 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1
## 3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1
## 4 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0
## 5 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0
## 6 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0
## 7 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0
## 8 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0
## 9 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1
## 10 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1
## 11 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1
## Variables not shown: gear (dbl), carb (dbl)
bind_rows() - об“єднати по рядках.
bind_cols() - об“єднати по колонках.
y <- data.frame(x1 = c("A", "B", "C"), x2 = c(1, 2, 3), stringsAsFactors = F)
z <- data.frame(x1 = c("B", "C", "D"), x2 = c(2, 3, 4), stringsAsFactors = F)
bind_rows(y, z)
## Source: local data frame [6 x 2]
##
## x1 x2
## (chr) (dbl)
## 1 A 1
## 2 B 2
## 3 C 3
## 4 B 2
## 5 C 3
## 6 D 4
bind_cols(y, z)
## Source: local data frame [3 x 4]
##
## x1 x2 x1 x2
## (chr) (dbl) (chr) (dbl)
## 1 A 1 B 2
## 2 B 2 C 3
## 3 C 3 D 4
y <- data.frame(x1 = c("A", "B", "C"), x2 = c(1, 2, 3), stringsAsFactors = F)
z <- data.frame(x1 = c("B", "C", "D"), x3 = c(2, 3, 4), stringsAsFactors = F)
y; z
## x1 x2
## 1 A 1
## 2 B 2
## 3 C 3
## x1 x3
## 1 B 2
## 2 C 3
## 3 D 4
inner_join(x = y, y = z, by = "x1")
## x1 x2 x3
## 1 B 2 2
## 2 C 3 3
left_join(x = y, y = z, by = "x1")
## x1 x2 x3
## 1 A 1 NA
## 2 B 2 2
## 3 C 3 3
right_join(x = y, y = z, by = "x1")
## x1 x2 x3
## 1 B 2 2
## 2 C 3 3
## 3 D NA 4
full_join(x = y, y = z, by = "x1")
## x1 x2 x3
## 1 A 1 NA
## 2 B 2 2
## 3 C 3 3
## 4 D NA 4