用适用计算

sil*_*ter 6 r apply dplyr

我有一个表有五列年份,收入,养老金,收入和工资.在这张表中,我使用下面的代码进行了计算:

library(dplyr)
#DATA
TEST<-data.frame(
  Year= c(2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021),
  Revenue =c(8634,5798,6022,6002,6266,6478,6732,7224,6956,6968,7098,7620,7642,8203,9856,20328,22364,22222,23250,25250,26250,27250),
  Pensions =c(8734,5798,7011,7002,7177,7478,7731,7114,7957,7978,7098,7710,7742,8203,9857,10328,11374,12211,13150,15150,17150,17150),
  Income =c(8834,5898,6033,6002,6366,6488,6833,8334,6956,6968,8098,8630,8642,8203,9856,30328,33364,32233,33350,35350,36350,38350),
  Wages =c(8834,5598,8044,8002,8488,8458,8534,5444,8958,8988,5098,5840,5842,8203,9858,40328,44384,42244,43450,45450,48450,45450)
    )

#FUNCTION
fun1 <- function(x){ ((x - lag(x))/lag(x))*100}

#CALCULATION
ESTIMATION_0<-mutate(TEST,
                     Nominal_growth_Revenue=fun1(Revenue),
                     Nominal_growth_Pensions=fun1(Pensions),
                     Nominal_growth_Income=fun1(Income),
                     Nominal_growth_Wages=fun1(Wages)
                      )
Run Code Online (Sandbox Code Playgroud)

但我的目的是优化此代码并使用apply函数(或类似的东西)进行此计算.即为此计算我写了4个代码行,但我喜欢用一个代码行来完成.所以有人可以帮我解决这个问题吗?

sin*_*dur 5

假设您有一个带有相关列的字符向量:

cols <- c("Revenue", "Pensions", "Income", "Wages")
Run Code Online (Sandbox Code Playgroud)

用途apply():

TEST[paste0('nomial_growth', cols)] <- apply(TEST[cols], 2, fun1) 
Run Code Online (Sandbox Code Playgroud)

或者data.table:

library(data.table)
setDT(TEST)
TEST[, (paste0('nomial_growth', cols)) := lapply(.SD, fun1), .SDcols = cols]
Run Code Online (Sandbox Code Playgroud)