Ваш предложенный пример с использованием данных BJSales явно не дифференцируем,
поэтому вместо этого я покажу производную гораздо более гладкой функции. Если ваши реальные данные гладкие, это должно работать для вас.
Самый простой способ аппроксимировать производную - это просто использовать конечные разности.
f '(x) ≈ (f (x + h) - f (x)) / h
## Smooth sample function
x = seq(0,10,0.1)
y = x/2 + sin(x)
plot(x,y, pch=20)
## Simplest - first difference
d1 = diff(y)/diff(x)
d1 = c(d1[1],d1)
Давайте использовать его для построения касательной в качестве проверки ошибок. Я выбрал место для произвольного рисования касательной линии: 18-я точка, х = 1,7
plot(x,y, type="l")
abline(y[18]-x[18]*d1[18], d1[18])
Чтобы получить запрошенный вами фрейм данных. Вам просто нужно
Derivative = data.frame(x, d1)