Вот базовый код R, который применяется ave
+ pmax
. Надеюсь, что приведенный ниже код может достичь вашей цели
df <- within(df,Bill <- ave(Ch1,Name,FUN = function(v) c(NA,sign(v[-1]-v[-length(v)])*pmax(v[-1]/v[-length(v)],v[-length(v)]/v[-1]))))
, чтобы
> df
Name Year Ch1 Origin Bill
1 A 1995 11 a NA
2 A 1996 12 b 1.090909
3 A 1997 3 a -4.000000
4 A 2000 14 a 4.666667
5 B 1997 21 c NA
6 B 1998 12 c -1.750000
DATA
df <- structure(list(Name = c("A", "A", "A", "A", "B", "B"), Year = c(1995L,
1996L, 1997L, 2000L, 1997L, 1998L), Ch1 = c(11L, 12L, 3L, 14L,
21L, 12L), Origin = c("a", "b", "a", "a", "c", "c")), class = "data.frame", row.names = c(NA,
-6L))