Вот функция, которая делает то, что вы хотите
# create data
n <- 100
saley <- rnorm(n, 100, 5)
gvkey <- factor(c(rep("A", n/2), rep("B", n/2)))
fyearq <- c(1980:(1980+n/2-1), 1992:(1992+n/2-1))
df <- data.frame(saley, gvkey, fyearq)
# function for growth ratea
growth_rate <- function(x){
out <- c(NA, x[2:length(x)]/ x[1:(length(x)-1)])
return(out)
}
# function for volatility
volatility <- function(x){
out <- rep(NA, length(x))
for(i in (1+4):(length(x)-5)){
out[i] <- sqrt((x[i] - mean(x[(i-4):(i+5)]))**2 /10)
}
return(out)
}
# apply function for growth rates
df$growth_rate <- do.call("c", by(df$saley, df$gvkey, growth_rate))
# applying function for volatility
df$volatility <- do.call("c", by(df$growth_rate, df$gvkey, volatility))
df
Я попытался ответить на вопрос, хотя для меня это не очень хороший вопрос, поскольку он требует полного метода, а не спрашивает что-то конкретное опрограммирование на R. Преимущество для тех, кто читает это, мало по сравнению с вопросами программирования, которые можно применять во многих ситуациях.