Пакет 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 package library (tidyr) n = 10 # creating a data frame tidy_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 frame tidy_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_dataframe long <- tidy_dataframe %>% gather (Group, Frequency, Group.1:Group.3) # print the data frame in a long format long |
Выход:
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 package library (tidyr) long <- tidy_dataframe %>% gather (Group, Frequency, Group.1:Group.3) # use separate() function to make data wider separate_data <- long %>% separate (Group, c ( "Allotment" , "Number" )) # print the wider format separate_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 package library (tidyr) long <- tidy_dataframe %>% gather (Group, Frequency, Group.1:Group.3) # use separate() function to make data wider separate_data <- long %>% separate (Group, c ( "Allotment" , "Number" )) # use unite() function to glue # Allotment and Number columns unite_data <- separate_data %>% unite (Group, Allotment, Number, sep = "." ) # print the new data frame unite_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 package library (tidyr) long <- tidy_dataframe %>% gather (Group, Frequency, Group.1:Group.3) # use separate() function to make data wider separate_data <- long %>% separate (Group, c ( "Allotment" , "Number" )) # use unite() function to glue # Allotment and Number columns unite_data <- separate_data %>% unite (Group, Allotment, Number, sep = "." ) # use unite() function to make data wider back_to_wide <- unite_data %>% spread (Group, Frequency) # print the new data frame back_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 package library (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 package library (tidyr) df <- iris names (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 package df <- data.frame (Month = 1:6, Year = c (2000, rep ( NA , 5))) # print the df data frame df # Output (i) # use fill() to fill missing values in # Year column in df data frame df %>% 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 package library (tidyr) # creating a numeric vector num_vec <- c (1, 7, 9, 14, 19, 20) # use full_seq() to fill missing # values in num_vec full_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 package library (tidyr) # create a tibble df with missing values df <- tibble (S.No = c (1:10), Name = c ( 'John' , 'Smith' , 'Peter' , 'Luke' , 'King' , rep ( NA , 5))) # print df tibble df # Output (i) # use drop_na() to drop columns # in df with missing values df %>% 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 package library (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 na df %>% 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 Генри