Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

3 года назад
Открыть в
tidyr 1.3.0: новые аргументы too_few и too_many Недавно я рассказал о том, что в tidyr 1.3.0 завезли новое семейство функций separate_*(). Так вот, это семейство функций получило 2 новых, очень полезных аргумента: ● too_few - Что делать, если значение разделится на слишком маленькое к-во частей? - "error" - вызвать ошибку (дефолтное значение). - "debug" - добавляет дополнительные столбцы к выходным данным, чтобы помочь вам найти и решить основную проблему: - x_ok - показывает, можно ли разделить столбец, как вы просили - x_pieces - сообщает вам фактическое количество частей - x_remainder - показывает вам все, что осталось после разделения. - "align_start" - добавляет NA в конце до нужной длины. - "align_end" - (только для separate_wider_delim()) добавляя NA в начале, чтобы заполнить до нужной длины. ● too_many - Что делать, если значение разделится на слишком большое к-во частей? - "error" - вызвать ошибку (дефолтное значение). - "debug" - добавляет дополнительные столбцы к выходным данным, чтобы помочь вам найти и решить основную проблему - "drop" - отбрасывает лишние части. - "merge" - (только для separate_wider_delim() )объединит дополнительные части. Пример:
library(tidyr)

# тестовые данные
df <- tibble(
  id = 1:3,
  x = c("a", "a-b", "a-b-c")
)

# запускаем процесс отладки
df |> separate_wider_delim(
  x, 
  delim = "-", 
  names = c("x", "y"),
  too_few = "debug",
  too_many = "debug"
)

# A tibble: 3 × 6
     id x     y     x_ok  x_pieces x_remainder
  <int> <chr> <chr> <lgl>    <int> <chr>      
1     1 a     NA    FALSE        1 ""         
2     2 a-b   b     TRUE         2 ""         
3     3 a-b-c b     FALSE        3 "-c"    

Итак, мы запросили разделение столбца x на 2 новых столбца x и y, но после разбиения через - у нас получается, что в первой строке будет всего один элемент, а в третей 3. Соответственно x_ok выводит FALSE для 1ой и 3ей строк,
x_pieces
показывается конечное количество частей, соответственно 1-2-3, а в столбце
x_remainder
мы видим лишнюю часть третей строки, которая останется после разбиения, с используемыми нами параметрами. Информацию из дополнительных столбцов можно использовать либо для того, что бы исправить проблему. либо для того что бы изменить параметры разделения столбца. Давайте попробуем изменить значения аргументов too_few и too_many так, что бы в случае когда частей недостаточно (строка 1), то мы добавим NA значение для достижения необходимого к-ва частей (too_few="align_start"), а когда частей больше, чем указанное нами к-во столбцов (стока 3), удалим лишние (too_many = "drop"). df |> separate_wider_delim( x, delim = "-", names = c("a", "b"), too_few = "align_start", too_many = "drop" )
# A tibble: 3 × 3
     id a     b    
  <int> <chr> <chr>
1     1 a     NA   
2     2 a     b    
3     3 a     b  

Ссылки: - Текст является частичным переводом статьи "tidyr 1.3.0" #заметки_по_R