Size: a a a

R (язык программирования)

2021 May 19

ГД

Григорий Демин... in R (язык программирования)
Ща забацаю
источник

PU

Philipp Upravitelev in R (язык программирования)
гайз, кто-нибудь в R в гугл-колабе работал? как там обстоит дело с сохранением табличек?
источник

PU

Philipp Upravitelev in R (язык программирования)
*в неинтерактивном режиме
источник

ГД

Григорий Демин... in R (язык программирования)
ckufr - https://github.com/gdemin/ckufr Устанавливать через devtools::install_github("gdemin/ckufr")
источник

PU

Philipp Upravitelev in R (язык программирования)
огонь
источник

PU

Philipp Upravitelev in R (язык программирования)
забавно, что при вот такоем вызове функции он также отпарвляет в поиск %)
> ckufr::fuck
Searching the error 'no function 'fuck' is visible'...
источник

ГД

Григорий Демин... in R (язык программирования)
Загадка... наверное, перемудрил с автопринтом, чтобы скобочки не печатать...
источник

ГД

Григорий Демин... in R (язык программирования)
все равно странно. в неймспейсе есть, экспортируются  и вызываются
источник

PU

Philipp Upravitelev in R (язык программирования)
да пофиг, и так хорошо :)
источник

AS

Alexander Semenov in R (язык программирования)
fuck_this_shit: удаляет все проекты и репозитории, отправляет всем контактам в Outlook сообщение о том, что они мудаки, откликается на все вакансии, содержащие слова из резюме.
источник

UT

Unknown T. in R (язык программирования)
А что же будет с --force
источник

ГД

Григорий Демин... in R (язык программирования)
как-то неконсистентно... про резюме и вакансии надо в отдельную функцию
источник

IS

Ilya Shutov in R (язык программирования)
1. Текущий pipe не имеет отношения к tidyverse, это сам по себе отдельный пакет magrittr
2. Есть и другие пайпы, см, например, https://win-vector.com/tag/bizarro-pipe/ или data.table
3. Про другие блага -- многие ли используют пайпы %$%, %T>%, %>% {} ?
4. Код новичков часто подлежит полному рефакторингу. И как он там писал --- совершенно неважно. Фундамент неправильно кладут.

Ничего никуда не денется. Базис тянется от S+.
источник

М

Марк in R (язык программирования)
В data.table, это вы про такой pipe?
источник

М

Марк in R (язык программирования)
источник

IS

Ilya Shutov in R (язык программирования)
Ну да
источник

PU

Philipp Upravitelev in R (язык программирования)
уважаемые, кто работает с googlesheets4
скажите пожалуйста, если я хочу неинтерактивный доступ и авторизацию, то мне надо создавать технический серверный аккаунт в проекте, и его креды использовать, верно?
но, если я все правильно понял, спредшиты, которые я с его помощью создаю, я даже толком посмотреть не смогу, кроме как костылями типа gs4_browse.

кажется, в таком случае проще создать где-то у себя папку, дать к ней доступ этому серверному акку и уже таким образом работать. что думаете?
источник

IS

Ilya Shutov in R (язык программирования)
Запрос немного странный. Тем не менее, покажу вариант решения.

# Шаг 1. Генерируем датасет, на каждого пользователя ~ по 10 записей
# Займ -- положительное значение, погашение -- отрицательное
total_users <- 100

events_dt <- tibble(
 date = sample(
   seq.Date(as.Date("2021-01-01"), as.Date("2021-04-30"), by = "1 day"),
   total_users * 10,
   replace = TRUE)
 ) %>%
 # сделаем суммы кратными 50 р.
 mutate(amount = (runif(n(), -2000, 1000)) %/% 50 * 50) %>%
 # нашпигуем идентификаторами пользователей
 mutate(user_id = sample(!!total_users, n(), replace = TRUE)) %>%
 setDT(key = "date") %>%
 # первая запись должна быть займом
 .[.[, .I[1L], by = user_id]$V1, amount := abs(amount)] %>%
 # для простоты оставим только одну операцию в день,
 # иначе нельзя порядок определить и гранулярность до секунд надо спускать
 # либо вводить порядковый номер займа и погашения
 unique(by = c("user_id", "date"))

# Шаг 2. Расчитываем даты погашения каждого займа
# инициализируем аккумулятор
accu_dt <- events_dt[amount < 0, .(accu = cumsum(amount), date), by = user_id]

ff <- function(dt){
 # на вход получаем матрицу пользователей и их платежей на заданную дату
 # затягиваем суммы займов
 accu_dt[dt, amount := i.amount, on = "user_id"]
 accu_dt[is.na(amount) == FALSE, accu := accu + amount][accu > 0, accu := NA, by = user_id]
 
 calc_dt <- accu_dt[!is.na(accu), head(date, 1), by = user_id]

 # нанизываем обратно на входной data.frame, сохраняя порядок следования
 calc_dt[dt, on = "user_id"]$V1
}

repay_dt <- events_dt[amount > 0] %>%
 .[, repayment_date := ff(.SD), by = date] %>%
 .[order(user_id, date)]

# Шаг 3. Считаем динамику задолженности по периоду
calcDebt <- function(report_date){
 as_tibble(repay_dt) %>%
   # выкидываем все, что уже погашено на дату отчета
   filter(is.na(repayment_date) | repayment_date > !! report_date) %>%
   mutate(delay = as.numeric(!!report_date - date)) %>%
   # размечаем просрочки
   mutate(tag = santoku::chop(delay, breaks = c(0, 31, 61, 90),
                              labels = c("< 0", "0-30", "31-60", "61-90", "90+"),
                              extend = TRUE, drop = FALSE)) %>%
   # делаем сводку
   group_by(tag) %>%
   summarise(amount = sum(amount)) %>%
   mutate_at("tag", as.character)
}

# Устанавливаем окно наблюдения
df <- seq.Date(as.Date("2021-04-01"), as.Date("2021-04-30"), by = "1 day") %>%
 tibble(date = ., tbl = purrr::map(., calcDebt)) %>%
 unnest(tbl)

# строим график
gp <- ggplot(df, aes(date, amount, colour = tag)) +
 geom_point(alpha = 0.5, size = 3) +
 geom_line() +
 ggthemes::scale_colour_tableau("Tableau 10") +
 theme_minimal()

gp
источник

IS

Ilya Shutov in R (язык программирования)
Получаем такую картинку
источник

IS

Ilya Shutov in R (язык программирования)
Филипп, не понял, в чем проблема. Нужно читать файл с гугла?
https://googlesheets4.tidyverse.org/
https://gargle.r-lib.org/index.html
источник