Пакет tidyr в программировании на R

Опубликовано: 5 Января, 2022

Пакеты на языке 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 Генри