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

Description
Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности.

В канале публикуются статьи, доклады, новости, уроки и заметки по языку R.

Для связи: @AlexeySeleznev
Реклама: http://bit.ly/39MwJCY
Advertising
We recommend to visit

Бизнес блог #1
Выжимаю книги до самой сути.

? Реклама - @jaMasha

? Хотите свою книгу? Мы напишем её за вас и сделаем книгу бестселлером. Подробности в боте @Summary_library_bot

? Оставьте след в истории с помощью книги
https://expert-book.pro

Фильмы и сериалы со всей планеты. Мы знаем, что посмотреть, где посмотреть и на что сходить в кино.

Last updated 2 days, 10 hours ago

Все материалы размещены по партнёрской програме ivi.ru | All materials are posted on the partner program ivi.ru

По всем вопросам: @kuzr103
Купить рекламу: https://telega.in/c/k1noxa103
Основной канал: https://t.me/kino_hd2

Last updated 2 weeks, 1 day ago

1 month, 2 weeks ago
**Работа****с динамическими именами столбцов в dplyr: …

Работас динамическими именами столбцов в dplyr: sym(), syms() и оператор !!

Часто при работе с данными в R возникает необходимость обращаться к столбцам таблицы по их именам, которые могут передаваться как строки. Это может быть полезно, если имена столбцов не известны заранее или задаются динамически в функциях. В dplyr для таких задач существует механизм tidy evaluation, и одними из ключевых инструментов являются функции sym(), syms() и оператор !!.

Проблема:
Обычно в dplyr мы обращаемся к столбцам напрямую, как показано ниже:

```
library(dplyr)

data <- tibble(
Area = c('IT', 'Finance', NA),
Date = as.Date(c('2023-01-01', NA, '2023-03-15'))
)

# Фильтруем строки, где нет пропусков в столбцах 'Area' и 'Date'
filtered_data <- data %>%
filter(!is.na(Area), !is.na(Date))
```

Но что, если имена столбцов будут передаваться в виде строк, например через аргументы функции? Простое использование строк в filter() не сработает.

Решение: sym() и оператор !!
Функция sym() преобразует строку в символ (символ — это объект, который может быть интерпретирован как имя переменной), а оператор !! используется для развертывания этого символа в выражении. Давайте рассмотрим, как это работает:

```
library(dplyr)

# Функция для фильтрации данных на основе имен столбцов, переданных как строки
filter_data <- function(data, col_name1, col_name2) {
col1 <- sym(col_name1)
col2 <- sym(col_name2)

data %>%
filter(!is.na(!!col1), !is.na(!!col2))
}

# Пример данных
data <- tibble(
Area = c('IT', 'Finance', NA),
Date = as.Date(c('2023-01-01', NA, '2023-03-15'))
)

# Фильтруем данные, используя имена столбцов как строки
filtered_data <- filter_data(data, 'Area', 'Date')
print(filtered_data)
```

В этой функции:
sym(col_name1) и sym(col_name2) преобразуют строки в символы, которые затем могут использоваться в dplyr::filter().
Оператор !! разворачивает символ в выражении, позволяя использовать его как имя переменной в функции filter().

Работа с несколькими столбцами: syms()
Если вам нужно работать сразу с несколькими столбцами, то для преобразования списка строк в символы можно использовать функцию syms().

```
library(dplyr)

# Функция для фильтрации нескольких столбцов
filter_multiple <- function(data, col_names) {
cols <- syms(col_names)

data %>%
filter(across(all_of(col_names), ~ !is.na(.)))
}

# Пример данных
data <- tibble(
Area = c('IT', 'Finance', NA),
Date = as.Date(c('2023-01-01', NA, '2023-03-15')),
Amount = c(1000, 2000, NA)
)

# Фильтруем строки, где нет пропусков в нескольких столбцах
filtered_data <- filter_multiple(data, c('Area', 'Date', 'Amount'))
print(filtered_data)
```

Здесь:

syms(col_names) преобразует вектор строк в список символов.
across() вместе с all_of() позволяет удобно применить фильтр ко всем указанным столбцам.

————————————
Использование функций sym(), syms() и оператора !! — это мощный инструмент для написания гибкого и динамического кода в R. Он особенно полезен при работе с большими данными и пакетами вроде dplyr, когда имена столбцов не известны заранее или приходят из пользовательского ввода.

О подобных примерах рассказано в виньетке "Программирование с dplyr".

#заметки_по_R

2 months, 2 weeks ago
3 months, 3 weeks ago
9 months, 3 weeks ago

Добавляемполезные аннотации к части вызова пакетв в своих скриптах

Принято прописывать команды загрузки пакетов в начале вашего скрипта, обычно это выглядит как-то так:

library(rjira) library(dplyr) library(tidyr) library(snakecase) library(purrr) library(stringr) library(bigrquery) library(googlesheets4) library(glue)

Это реальный пример загрузки пакетов в одном из моих скриптов. Пакет annotater добавляет в RStudio Addon, который позволяет добавить описание вызовам пакетов, на данный момент доступно 5 типов аннотаций:

1. Annotate package calls in active file

Добавляет тайтлы пакетов к команде их вызовов. т.е. превратит пример выше в следующий:

```

library(rjira) # Work with Jira API
library(dplyr) # A Grammar of Data Manipulation
library(tidyr) # Tidy Messy Data
library(snakecase) # Convert Strings into any Case
library(purrr) # Functional Programming Tools
library(stringr) # Simple, Consistent Wrappers for Common String Operations
library(bigrquery) # An Interface to Google's 'BigQuery' 'API'
library(googlesheets4) # Access Google Sheets using the Sheets API V4
library(glue) # Interpreted String Literals
```

2. Annotate package repository source in active file

Добавляет информацию о репозитории и версии пакета:

library(rjira) \# [github::selesnow/rjira] v0.0.0.9000 library(dplyr) \# CRAN v1.1.2 library(tidyr) \# CRAN v1.2.1 library(snakecase) \# CRAN v0.11.0 library(purrr) \# CRAN v0.3.4 library(stringr) \# CRAN v1.4.1 library(bigrquery) \# CRAN v1.5.0 library(googlesheets4) \# CRAN v1.0.1 library(glue) \# CRAN v1.6.2

3. Annotate tittles and repository sources in active file

Эта опция добавит одновременно и описание пакета и описание репозитория и его версии

4. Annotate each package's function calls

Пропишет возле вызова пакета список функций. который в текущем скрипте из этого пакета используется.

library(rjira) \# jr\_get\_fields jr\_issue\_search library(dplyr) \# %>% filter mutate left\_join group\_by row\_number ungroup pull select all\_of coalesce any\_of where rename\_with matches across library(tidyr) \# %>% all\_of any\_of unnest\_wider matches hoist library(snakecase) \# to\_snake\_case library(purrr) \# %>% map\_dfc map library(stringr) \# %>% str\_remove library(bigrquery) \# bq\_auth bq\_dataset bq\_dataset\_query bq\_table bq\_table\_upload library(googlesheets4) \# gs4\_auth range\_read %>% library(glue) \# glue\_sql

5. Expand metapackages

Разворачивает вызов метапакета, в отдельные вызовы для каждого пакета, который в него входит.

Например вызов library(tidyverse) будет преобразован в:

\#\#\#\# library(ggplot2) library(tibble) library(tidyr) library(readr) library(purrr) library(dplyr) library(stringr) library(forcats) library(lubridate) \#\#\#\#

Функционал довольно полезный, особенно если вы планируете разбирать чужой скрипт, в котором используются неизвестные вам пакеты.

Пример работы на изображении к посту.

Ссылка на GitHub пакета annotater.

#заметки_по_R

We recommend to visit

Бизнес блог #1
Выжимаю книги до самой сути.

? Реклама - @jaMasha

? Хотите свою книгу? Мы напишем её за вас и сделаем книгу бестселлером. Подробности в боте @Summary_library_bot

? Оставьте след в истории с помощью книги
https://expert-book.pro

Фильмы и сериалы со всей планеты. Мы знаем, что посмотреть, где посмотреть и на что сходить в кино.

Last updated 2 days, 10 hours ago

Все материалы размещены по партнёрской програме ivi.ru | All materials are posted on the partner program ivi.ru

По всем вопросам: @kuzr103
Купить рекламу: https://telega.in/c/k1noxa103
Основной канал: https://t.me/kino_hd2

Last updated 2 weeks, 1 day ago