Пакет tidyr в программировании на R
Пакеты на языке R представляют собой набор функций R, скомпилированного кода и примеров данных. Они хранятся в каталоге под названием «библиотека» в среде R. По умолчанию R устанавливает набор пакетов во время установки. Один из самых важных пакетов в R - это пакет tidyr. Единственная цель пакета tidyr - упростить процесс создания аккуратных данных. Tidy data описывает стандартный способ хранения данных, который используется везде, где это возможно, в tidyverse . Если вы однажды убедитесь, что ваши данные аккуратны, вы потратите меньше времени на работу с инструментами и больше времени на анализ.
Установка
Чтобы использовать пакет в программировании на R, необходимо сначала установить пакет. Эту задачу можно выполнить с помощью команды install.packages («packagename») . Чтобы установить весь пакет tidyverse , введите следующее:
 install.packages ("тидиверс")

В качестве альтернативы, чтобы установить только пакет tidyr , введите следующее:
 install.packages ("тидыр")
Чтобы установить версию для разработки с GitHub, введите следующее:
# install.packages("devtools")
devtools::install_github("tidyverse/tidyr")
Важные глагольные функции в пакете tidyr
Набор данных:
Прежде чем переходить к важной глагольной функции, давайте сначала подготовим набор данных. Определите набор данных tidy_dataframe , содержащий данные о частоте посещения людей в определенной группе.
р
| # load the tidyr packagelibrary(tidyr) n = 10# creating a data frametidy_dataframe =data.frame(                      S.No =c(1:n),                    Group.1 =c(23, 345, 76, 212, 88,                                199, 72, 35, 90, 265),                    Group.2 =c(117, 89, 66, 334, 90,                               101, 178, 233, 45, 200),                    Group.3 =c(29, 101, 239, 289, 176,                                320, 89, 109, 199, 56)) # print the elements of the data frametidy_dataframe | 
Выход:
S.No Группа 1 Группа 2 Группа 3 1 1 23 117 29 2 2 345 89 101 3 3 76 66 239 4 4 212 334 289 5 5 88 90 176 6 6 199 101 320 7 7 72 178 89 8 8 35 233 109 9 9 90 45 199 10 10 265 200 56
Пакет tidyr предоставляет различные важные функции, которые можно использовать для очистки данных. Это:
- Функция gather () : она берет несколько столбцов и собирает их в пары ключ-значение. В основном это удлиняет «широкие» данные. Функция gather () берет несколько столбцов и сворачивает их в пары ключ-значение, дублируя все остальные столбцы по мере необходимости.
Syntax:
gather(data, key = “key”, value = “value”, …, na.rm = FALSE, convert = FALSE, factor_key = FALSE)
| Параметр | Описание | 
| данные | фрейм данных. | 
| ключ, значение | имена новых столбцов ключей и значений, как строки или как символы. | 
| ……. | подбор колонн. Если оставить поле пустым, будут выбраны все переменные. Вы можете указать простые имена переменных, выбрать все переменные между x и z с помощью x: z, исключить y с помощью -y. | 
| na.rm | если установлено TRUE, из вывода будут удалены строки, в которых столбец значений - NA. | 
| перерабатывать | установлен TRUE, он автоматически запустит type.convert () для ключевого столбца. Это полезно, если типы столбцов на самом деле числовые, целое или логическое. | 
| factor_key | если FALSE, значение по умолчанию, значения ключей будут сохранены как вектор символов. Если ИСТИНА, будет сохранен как коэффициент, сохраняющий исходный порядок столбцов. | 
Пример:
Теперь для лучшего понимания сделаем наши данные длинными с помощью функции gather () .
р
| # using gather() function on tidy_dataframelong <- tidy_dataframe %>%            gather(Group, Frequency,                   Group.1:Group.3) # print the data frame in a long formatlong | 
Выход:
S. Нет групповой частоты 1 1 Группа 1 23 2 2 Группа 1 345 3 3 Группа 1 76 4 4 Группа 1 212 5 5 Группа 1 88 6 6 Группа 1 199 7 7 Группа 1 72 8 8 Группа 1 35 9 9 Группа 1 90 10 10 Группа 1 265 11 1 Группа 2 117 12 2 Группа 2 89 13 3 Группа 2 66 14 4 Группа 2 334 15 5 Группа 2 90 16 6 Группа 2 101 17 7 Группа 2 178 18 8 Группа 2 233 19 9 Группа 2 45 20 10 Группа 2 200 21 1 Группа 3 29 22 2 Группа 3 101 23 3 Группа 3 239 24 4 Группа 3 289 25 5 Группа 3 176 26 6 Группа 3320 27 7 Группа 3 89 28 8 Группа 3 109 29 9 Группа 3 199 30 10 Группа 3 56
- Функция отдельного () : она преобразует более длинные данные в более широкий формат. Функция own () превращает столбец с одним символом в несколько столбцов.
Syntax:
separate(data, col, into, sep = ” “, remove = TRUE, convert = FALSE)
| Параметр | Описание | 
| данные | Фрейм данных. | 
| Col | Название или позиция столбца. | 
| в | Имена новых переменных, которые нужно создать как вектор символов. Используйте NA, чтобы опустить переменную в выводе. | 
| сен | Разделитель между столбцами. | 
| Удалить | Если установлено TRUE, он удалит входной столбец из выходного фрейма данных. | 
| перерабатывать | Если TRUE, будет запускать type.convert () с as.is = TRUE для новых столбцов. | 
Пример:
Мы можем сказать, что длинные наборы данных, созданные с помощью функции gather () , подходят для использования, но мы можем еще больше разбить групповую переменную с помощью отдельной () .
р
| # import tidyr packagelibrary(tidyr)long <- tidy_dataframe %>%            gather(Group, Frequency,                   Group.1:Group.3) # use separate() function to make data widerseparate_data <- long %>%            separate(Group,c("Allotment",                              "Number")) # print the wider formatseparate_data | 
Выход:
S.No Номер выделения Частота 1 1 Группа 1 23 2 2 Группа 1 345 3 3 Группа 1 76 4 4 Группа 1 212 5 5 Группа 1 88 6 6 Группа 1 199 7 7 Группа 1 72 8 8 Группа 1 35 9 9 Группа 1 90 10 10 Группа 1 265 11 1 Группа 2 117 12 2 Группа 2 89 13 3 Группа 2 66 14 4 Группа 2334 15 5 Группа 2 90 16 6 Группа 211 17 7 Группа 2178 18 8 Группа 2 233 19 9 Группа 2 45 20 10 Группа 2 200 21 1 Группа 3 29 22 2 Группа 3 101 23 3 Группа 3 239 24 4 Группа 3 289 25 5 Группа 3176 26 6 Группа 3320 27 7 Группа 3 89 28 8 Группа 3109 29 9 Группа 3 199 30 10 Группа 3 56
- Функция unite () : объединяет два столбца в один столбец. Функция unite () - это удобная функция для объединения нескольких значений переменных в одно. По сути, он объединяет две переменные одного наблюдения в одну переменную.
Syntax:
unite(data, col, …, sep = “_”, remove = TRUE)
| Параметр | Описание | 
| данные | Фрейм данных. | 
| Col | Имя нового столбца. | 
| …. | Подборка желаемых столбцов. Если пусто, выбираются все переменные. | 
| сен | Разделитель для использования между значениями. | 
| Удалить | Если TRUE, удалить входные столбцы из выходного фрейма данных. | 
Пример:
Unite - это комплимент отдельного. Чтобы отменить отдельный () , мы можем использовать unite () , который объединяет две переменные в одну. Здесь мы объединим два столбца Group и Number с разделителем «.» .
р
| # import tidyr packagelibrary(tidyr) long <- tidy_dataframe %>%            gather(Group, Frequency,                   Group.1:Group.3) # use separate() function to make data widerseparate_data <- long %>%            separate(Group,c("Allotment",                              "Number")) # use unite() function to glue# Allotment and Number columnsunite_data <- separate_data %>%            unite(Group, Allotment,                  Number, sep =".") # print the new data frameunite_data | 
Выход:
S. Нет групповой частоты 1 1 Группа 1 23 2 2 Группа 1 345 3 3 Группа 1 76 4 4 Группа 1 212 5 5 Группа 1 88 6 6 Группа 1 199 7 7 Группа 1 72 8 8 Группа 1 35 9 9 Группа 1 90 10 10 Группа 1 265 11 1 Группа 2 117 12 2 Группа 2 89 13 3 Группа 2 66 14 4 Группа 2 334 15 5 Группа 2 90 16 6 Группа 2 101 17 7 Группа 2 178 18 8 Группа 2 233 19 9 Группа 2 45 20 10 Группа 2 200 21 1 Группа 3 29 22 2 Группа 3 101 23 3 Группа 3 239 24 4 Группа 3 289 25 5 Группа 3 176 26 6 Группа 3320 27 7 Группа 3 89 28 8 Группа 3 109 29 9 Группа 3 199 30 10 Группа 3 56
- Функция spread () : помогает преобразовать более длинный формат в более широкий формат. Функция spread () распределяет пару "ключ-значение" по нескольким столбцам.
Syntax:
spread(data, key, value, fill = NA, convert = FALSE)
| Параметр | Описание | 
| данные | Фрейм данных. | 
| ключ | Названия столбцов или позиции. | 
| ценить | Названия столбцов или позиции. | 
| наполнять | Если установлено, отсутствующие значения будут заменены этим значением. | 
| перерабатывать | Если TRUE, type.convert () с asis = TRUE будет запускаться для каждого из новых столбцов. | 
Пример:
Мы можем преобразовать данные из длинных в широкие с помощью функции spread () .
р
| # import tidyr packagelibrary(tidyr) long <- tidy_dataframe %>%            gather(Group, Frequency,                   Group.1:Group.3) # use separate() function to make data widerseparate_data <- long %>%            separate(Group,c("Allotment",                              "Number")) # use unite() function to glue# Allotment and Number columnsunite_data <- separate_data %>%            unite(Group, Allotment,                  Number, sep =".") # use unite() function to make data widerback_to_wide <- unite_data %>%            spread(Group, Frequency) # print the new data frameback_to_wide | 
Выход:
S.No Группа 1 Группа 2 Группа 3 1 1 23 117 29 2 2 345 89 101 3 3 76 66 239 4 4 212 334 289 5 5 88 90 176 6 6 199 101 320 7 7 72 178 89 8 8 35 233 109 9 9 90 45 199 10 10 265 200 56
- Функция nest () : создает список фреймов данных, содержащих все вложенные переменные. Вложение - это неявно суммирующая операция. Это полезно в сочетании с другими сводками, которые работают с целыми наборами данных, особенно с моделями.
Syntax: nest(data, …, .key = “data”)
| Параметр | Описание | 
| данные | Фрейм данных. | 
| …. | Подборка столбцов. Если пусто, выбираются все переменные. | 
| .ключ | Имя нового столбца в виде строки или символа. | 
Пример: давайте попробуем вложить столбец Group.2 из tidy_dataframe, который мы создали в наборе данных.
р
| # import tidyr packagelibrary(tidyr) df <- tidy_dataframe # nest column Group.1 in# tidy_dataframe using nest()df %>%nest(data =c(Group.1)) | 
Выход:
 # Стол: 10 х 4
    S.No Группа 1 Данные группы 3            
   <int> <dbl> <dbl> <list>          
 1 1 23 29 <таблица [1 x 1]>
 2 2 345 101 <таблица [1 x 1]>
 3 3 76 239 <таблица [1 x 1]>
 4 4 212 289 <таблица [1 x 1]>
 5 5 88 176 <таблица [1 x 1]>
 6 6 199 320 <таблица [1 x 1]>
 7 7 72 89 <таблица [1 x 1]>
 8 8 35 109 <таблица [1 x 1]>
 9 9 90 199 <таблица [1 x 1]>
10 10 265 56 <таблица [1 x 1]>
- Функция unnest () : в основном отменяет операцию раскроя. Он делает каждый элемент списка отдельной строкой. Он может обрабатывать столбцы списков, которые содержат атомарные векторы, списки или фреймы данных (но не смесь разных типов).
Syntax:
unnest(data, …, .drop = NA, .id = NULL, .sep = NULL, .preserve = NULL)
| Параметр | Описание | 
| данные | Фрейм данных | 
| …. | Спецификация столбцов, которые нужно разложить. Если опущено, по умолчанию используются все столбцы списка. | 
| .уронить | Следует ли удалить дополнительные столбцы списка? По умолчанию, он сбросит их, если отключит указанные столбцы требуют дублирования строк. | 
| .я бы | Идентификатор фрейма данных. | 
| .sep | Если не NULL, имена столбцов невложенного фрейма данных объединит имя исходного списка-столбца с имена из вложенного фрейма данных, разделенные .sep. | 
| .сохранять | Список столбцов для сохранения в выводе. Это будет дублируются так же, как атомные векторы. | 
Пример:
Мы попытаемся вложить и отключить столбец Species в фрейме данных iris в пакете tidyr.
р
| # import the tidyr packagelibrary(tidyr) df <- irisnames(iris) # nesting the species column in# the df data frame using nest()head(df %>%nest(data =c(Species)))# Output (i) # unnesting the species column# in the df data frame using unnest()head(df %>%unnest(Species,.drop =NA,                   .preserve =NULL))# Output (ii) | 
Выход (i):
 # Стол: 6 х 5
  Сепал.Длина сепала.Ширина лепестка.Длина лепестка.Данные по ширине            
         <dbl> <dbl> <dbl> <dbl> <list>          
1 5,1 3,5 1,4 0,2 <tibble [1 x 1]>
2 4,9 3 1,4 0,2 <таблица [1 x 1]>
3 4,7 3,2 1,3 0,2 <таблица [1 x 1]>
4 4,6 3,1 1,5 0,2 <таблица [1 x 1]>
5 5 3,6 1,4 0,2 <таблица [1 x 1]>
6 5,4 3,9 1,7 0,4 <таблица [1 x 1]>
Результат (ii):
 # Стол: 6 х 5
  Чашелист. Длина Чашел. Ширина Лепестка. Длина Лепестка. Ширина Виды
         <dbl> <dbl> <dbl> <dbl> <fct>  
1 5,1 3,5 1,4 0,2 сетоса 
2 4,9 3 1,4 0,2 сетоса 
3 4,7 3,2 1,3 0,2 сетоса 
4 4,6 3,1 1,5 0,2 сетоса 
5 5 3,6 1,4 0,2 сетоса 
6 5,4 3,9 1,7 0,4 сетоса 
- Функция fill () : используется для заполнения отсутствующих значений в выбранных столбцах с использованием предыдущей записи. Это полезно в общем формате вывода, где значения не повторяются, они записываются каждый раз, когда они меняются. Отсутствующие значения заменяются атомарными векторами; NULL заменяется в списке.
Syntax:
fill(data, …, .direction = c(“down”, “up”))
| Параметр | Описание | 
| данные | Фрейм данных. | 
| …. | Подборка столбцов. Если пусто, ничего не происходит. | 
| направление | Направление заполнения пропущенных значений. В настоящее время либо «вниз» (по умолчанию), либо «вверх» | 
Пример:
р
| # import the tidyr packagedf <-data.frame(Month = 1:6,                 Year =c(2000,rep(NA, 5))) # print the df data framedf# Output (i) # use fill() to fill missing values in# Year column in df data framedf %>%fill(Year)# Output (ii) | 
Выход (i):
Месяц год 1 1 2000 2 2 нет данных 3 3 нет данных 4 4 нет данных 5 5 нет данных 6 6 нет данных
Результат (ii):
Месяц год 1 1 2000 2 2 2000 3 3 2000 4 4 2000 5 5 2000 6 6 2000
- Функция full_seq () : она в основном заполняет недостающие значения в векторе, которые должны были соблюдаться, но не были. Вектор должен быть числовым.
Syntax: full_seq(x, period, tol = 1e-06)
| Параметр | Описание | 
| Икс | Числовой вектор. | 
| период | Разрыв между каждым наблюдением. | 
| тол | Числовой допуск для периодичности проверки. | 
Пример:
р
| # import the tidyr packagelibrary(tidyr) # creating a numeric vectornum_vec <-c(1, 7, 9, 14, 19, 20) # use full_seq() to fill missing# values in num_vecfull_seq(num_vector, 1) | 
Выход:
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
- Функция drop_na () : эта функция удаляет строки, содержащие пропущенные значения.
Syntax: drop_na(data, …)
| Параметр | Описание | 
| данные | Фрейм данных. | 
| …. | Подборка столбцов. Если пусто, выбираются все переменные. | 
Пример:
р
| # import tidyr packagelibrary(tidyr) # create a tibble df with missing valuesdf <-tibble(S.No =c(1:10),             Name =c('John','Smith','Peter',                      'Luke','King',rep(NA, 5))) # print df tibbledf# Output (i) # use drop_na() to drop columns# in df with missing valuesdf %>%drop_na(Name)# Output (ii) | 
Выход (i):
 # Стол: 10 x 2
    S.No Имя 
   <int> <chr>
 1 1 Иоанна 
 2 2 Смит
 3 3 Питер
 4 4 Луки 
 5 5 Король 
 6 6 <NA> 
 7 7 <NA> 
 8 8 <NA> 
 9 9 <NA> 
10 10 <NA> 
Результат (ii):
# Стол: 5 x 2 S.No Имя <int> <chr> 1 1 Иоанна 2 2 Смит 3 3 Питер 4 4 Луки 5 5 Король
- Функция replace_na () : Это заменяет отсутствующие значения.
Syntax: replace_na(data, replace, …)
| Параметр | Описание | 
| данные | Фрейм данных. | 
| заменять | Если данные являются фреймом данных, возвращает фрейм данных. Если данные - вектор, возвращает вектор класса, определяемый объединением данных и замены. | 
Пример:
р
| # import tidyr packagelibrary(tidyr) df <-data.frame(S.No =c(1:10),                 Name =c('John','Smith',                          'Peter','Luke',                          'King',rep(NA, 5))) df# Output (i) # use replace_na() to replace missing values or nadf %>%replace_na(list(Name ='Henry'))# Output (ii) | 
Выход (i):
 # Стол: 10 x 2
     S.No Имя 
   <int> <chr>
 1 1 Иоанна 
 2 2 Смит
 3 3 Питер
 4 4 Луки 
 5 5 Король 
 6 6 <NA> 
 7 7 <NA> 
 8 8 <NA> 
 9 9 <NA> 
10 10 <NA> 
Результат (ii):
S.No Имя 1 1 Иоанна 2 2 Смит 3 3 Питер 4 4 Луки 5 5 Король 6 6 Генри 7 7 Генри 8 8 Генри 9 9 Генри 10 10 Генри