У меня есть df
, где я хочу пересчитать некоторые столбцы на основе значения этих столбцов colnames
:
library(dplyr)
df <- data.frame(year = 1:3, "10" = 0:2, "20" = 3:5)
colnames(df)[2:3] <- c("10", "20")
df
year 10 20
1 1 0 3
2 2 1 4
3 3 2 5
Ожидаемый результат - col_name - col_values
. Я могу сгенерировать ожидаемый результат с помощью:
df %>% mutate(`10` = 10 - `10`) %>% mutate(`20` = 20 - `20`)
year 10 20
1 1 10 17
2 2 9 16
3 3 8 15
Как я могу сгенерировать тот же вывод без явного копирования соответствующего значения colnames
?
Я попробовал следующий код (который работает):
df %>% mutate(`10` = as.numeric(colnames(.)[2]) - `10`) %>% mutate(`20` = as.numeric(colnames(.)[3]) - `20`)
Поэтому я попытался еще больше уменьшить это, но мог думать только о:
df %>% mutate_at(vars(-year), ~ as.numeric(colnames(.)[.]))
, который, очевидно, может не работать, поскольку .
имеет два значения ..
Как мне достичь ожидаемого результата, используя mutate_at
или альтернативу?