Идея такая же, как у akrun, но вместо того, чтобы давать имена каждому столбцу, мы можем использовать group_by_at
и исключить plan
и db_perk
.
library(dplyr)
SQL_Table %>%
group_by_at(names(SQL_Table)[-grep("plan|db_perk", names(SQL_Table))]) %>%
mutate(db_perk_compare = db_perk/first(db_perk))
# # A tibble: 10 x 10
# # Groups: gender, marital_status, accel_type, extension_type, inflation, iss_age, dur [5]
# plan gender marital_status accel_type extension_type inflation iss_age dur db_perk db_perk_compare
# <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
# 1 BasicF F Married A.24 E.0 AC3.EC3 40 1 0.2 1
# 2 BasicF F Married A.24 E.0 AC3.EC3 40 2 0.25 1
# 3 BasicF F Married A.24 E.0 AC3.EC3 40 3 0.3 1
# 4 BasicF F Married A.24 E.0 AC3.EC3 40 4 0.4 1
# 5 BasicF M Single A.36 E.24 AC3.EC3 40 1 0.15 1
# 6 GradedF F Married A.24 E.0 AC3.EC3 40 1 0.25 1.25
# 7 GradedF F Married A.24 E.0 AC3.EC3 40 2 0.3 1.2
# 8 GradedF F Married A.24 E.0 AC3.EC3 40 3 0.5 1.67
# 9 GradedF F Married A.24 E.0 AC3.EC3 40 4 0.7 1.75
# 10 GradedF M Single A.36 E.24 AC3.EC3 40 1 0.1 0.667
Данные:
dput(SQL_Table)
structure(list(plan = c("BasicF", "BasicF", "BasicF", "BasicF",
"BasicF", "GradedF", "GradedF", "GradedF", "GradedF", "GradedF"
), gender = c("F", "F", "F", "F", "M", "F", "F", "F", "F", "M"
), marital_status = c("Married", "Married", "Married", "Married",
"Single", "Married", "Married", "Married", "Married", "Single"
), accel_type = c("A.24", "A.24", "A.24", "A.24", "A.36", "A.24",
"A.24", "A.24", "A.24", "A.36"), extension_type = c("E.0", "E.0",
"E.0", "E.0", "E.24", "E.0", "E.0", "E.0", "E.0", "E.24"), inflation = c("AC3.EC3",
"AC3.EC3", "AC3.EC3", "AC3.EC3", "AC3.EC3", "AC3.EC3", "AC3.EC3",
"AC3.EC3", "AC3.EC3", "AC3.EC3"), iss_age = c("40", "40", "40",
"40", "40", "40", "40", "40", "40", "40"), dur = c(1, 2, 3, 4,
1, 1, 2, 3, 4, 1), db_perk = c(0.2, 0.25, 0.3, 0.4, 0.15, 0.25,
0.3, 0.5, 0.7, 0.1)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
Создано в 2019-06-24 пакетом представ. (v0.3.0)