Итак, вы хотите вычесть из этих столбцов минимумы x1
и x2
и добавить эти минимумы к (Intercept)
? Если это так, это должно работать
library(tidyverse)
min_to_base <- function(df, cols){
mins <- lapply(df[cols], min)
df[cols] <- df[cols] - mins
df['(Intercept)'] <- df['(Intercept)'] + do.call(sum, mins)
df
}
impacts %>%
t %>%
as_tibble(rownames = 'dt') %>%
min_to_base(c('x1', 'x2'))
# dt `(Intercept)` x1 x2 x3
# <chr> <dbl> <dbl> <dbl> <dbl>
# 1 2016-01-01 19.9 0 0.0362 -0.217
# 2 2016-01-02 19.9 0.140 0.0562 -0.192
# 3 2016-01-03 19.9 0.137 0.254 -0.269
# 4 2016-01-04 19.9 0.129 0 -0.161
# 5 2016-01-05 19.9 0.0639 0.203 -0.152
# 6 2016-01-06 19.9 0.0175 0.0162 -0.197
Вот такой хакерский способ заставить функцию вести себя как NSE (тот же результат, что и выше).
min_to_base <- function(df, ...){
cols <- as.character(ensyms(...))
mins <- lapply(df[cols], min)
df[cols] <- df[cols] - mins
df['(Intercept)'] <- df['(Intercept)'] + do.call(sum, mins)
df
}
impacts %>%
t %>%
as_tibble(rownames = 'dt') %>%
min_to_base(x1, x2)
Используемые данные:
impacts <-
structure(list(`2016-01-01` = c(19.612765930918, 0.0139082609319898,
0.298043103003794, -0.217012113254805), `2016-01-02` = c(19.612765930918,
0.153780074988214, 0.317999312583603, -0.192164881529573), `2016-01-03` = c(19.612765930918,
0.150571795109967, 0.515644453462975, -0.269251568581305), `2016-01-04` = c(19.612765930918,
0.142512722884255, 0.261814150174792, -0.160625206980914), `2016-01-05` = c(19.612765930918,
0.0778498178207942, 0.464855455837326, -0.15224027496774), `2016-01-06` = c(19.612765930918,
0.0314062544574153, 0.278014325308919, -0.19657100740319)), class = "data.frame", row.names = c("(Intercept)",
"x1", "x2", "x3"))