Nano Hash - криптовалюты, майнинг, программирование

Как использовать mutate_at с несколькими функциями, где каждая функция имеет параметры?

Я хочу взять несколько запаздывающих значений нескольких столбцов в R.

Как использовать mutate_at, чтобы получить такие же результаты, как показано ниже? Допустим, в реальном примере 30 столбцов, поэтому нет смысла записывать формулу задержки 30x для каждого периода времени.

df <- data_frame(time_col = 1:26, col_1 = letters, col_2 = rev(letters))

df %>% mutate(col_1_lag_1 = lag(col_1, n = 1, by = time_col),
              col
df <- data_frame(time_col = 1:26, col_1 = letters, col_2 = rev(letters))

df %>% mutate_at(vars(col_1, col_2), funs(lag, lag), n = 1, n = 2, by = time_col)
lag_1 = lag(col_2, n = 1, by = time_col), col_1_lag_2 = lag(col_1, n = 2, by = time_col), col
df <- data_frame(time_col = 1:26, col_1 = letters, col_2 = rev(letters))

df %>% mutate_at(vars(col_1, col_2), funs(lag, lag), n = 1, n = 2, by = time_col)
lag_2 = lag(col_2, n = 2, by = time_col))

Я думаю, что это должно быть что-то вроде этого, но я не знаю, как указать оба набора параметров:

df <- data_frame(time_col = 1:26, col_1 = letters, col_2 = rev(letters))

df %>% mutate_at(vars(col_1, col_2), funs(lag, lag), n = 1, n = 2, by = time_col)
26.06.2018

Ответы:


1

Решение с помощью purrr.

library(dplyr)
library(purrr)

df <- data_frame(time_col = 1:26, col_1 = letters, col_2 = rev(letters))

map_dfc(1:2, function(x){
  df2 <- df %>% transmute_at(vars(starts_with("col")), 
                             funs(lag(., n = x, by = time_col)))
  return(df2)
}) %>%
  bind_cols(df, .) %>%
  set_names(c(names(df), paste0("col_", 1:2, "_lag_", rep(1:2, each = 2))))
# # A tibble: 26 x 7
#    time_col col_1 col_2 col_1_lag_1 col_2_lag_1 col_1_lag_2 col_2_lag_2
#       <int> <chr> <chr> <chr>       <chr>       <chr>       <chr>      
#  1        1 a     z     NA          NA          NA          NA         
#  2        2 b     y     a           z           NA          NA         
#  3        3 c     x     b           y           a           z          
#  4        4 d     w     c           x           b           y          
#  5        5 e     v     d           w           c           x          
#  6        6 f     u     e           v           d           w          
#  7        7 g     t     f           u           e           v          
#  8        8 h     s     g           t           f           u          
#  9        9 i     r     h           s           g           t          
# 10       10 j     q     i           r           h           s          
# # ... with 16 more rows
26.06.2018

2

Вот альтернативное purrr решение, использующее вложенный map_dfc и синтаксис квазицитирования

bind_cols(
    df,
    map_dfc(c("col_1", "col_2"), function(i) map_dfc(c(1, 2), function(n)
        df %>%
            transmute(!!paste0(i, "_lag_", n, collapse = "") := lag(!!rlang::sym(i), n = n, by = time_col)))))
## A tibble: 26 x 7
#   time_col col_1 col_2 col_1_lag_1 col_1_lag_2 col_2_lag_1 col_2_lag_2
#      <int> <chr> <chr> <chr>       <chr>       <chr>       <chr>
# 1        1 a     z     NA          NA          NA          NA
# 2        2 b     y     a           NA          z           NA
# 3        3 c     x     b           a           y           z
# 4        4 d     w     c           b           x           y
# 5        5 e     v     d           c           w           x
# 6        6 f     u     e           d           v           w
# 7        7 g     t     f           e           u           v
# 8        8 h     s     g           f           t           u
# 9        9 i     r     h           g           s           t
#10       10 j     q     i           h           r           s
## ... with 16 more rows
26.06.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..