数据帧R中值的最大一阶导数

数据帧R中值的最大一阶导数,r,R,你好,我正在寻找一些帮助来处理我的数据集。我有14000行和500列,我试图获得不同列组中单个行的一阶导数的最大值。我将数据保存为数据框,第一列是变量的名称。我的数据如下所示: Species Spec400 Spec405 Spec410 Spec415 1 AfricanOilPalm_1_Lf_1 0.2400900 0.2318345 0.2329633 0.2432734 2 AfricanOilPalm_1_Lf_10 0.1783162 0.1808581 0.

你好,我正在寻找一些帮助来处理我的数据集。我有14000行和500列,我试图获得不同列组中单个行的一阶导数的最大值。我将数据保存为数据框,第一列是变量的名称。我的数据如下所示:

 Species   Spec400   Spec405   Spec410   Spec415
1  AfricanOilPalm_1_Lf_1 0.2400900 0.2318345 0.2329633 0.2432734
2 AfricanOilPalm_1_Lf_10 0.1783162 0.1808581 0.1844433 0.1960315
3 AfricanOilPalm_1_Lf_11 0.1699646 0.1722618 0.1615062 0.1766804
4 AfricanOilPalm_1_Lf_12 0.1685733 0.1743336 0.1669799 0.1818896
5 AfricanOilPalm_1_Lf_13 0.1747400 0.1772355 0.1735916 0.1800227
例如,对于物种列中的每个变量,我想得到从Spec495到Spec500的最大导数。这就是我在出错之前所做的

x<-c(495,500,505,510,515,520,525,530,535,540,545,550)##get x values of     reflectance(Spec495 to Spec500)

y.data.f<-hsp[,21:32]##get row values for the required columns

y<-as.numeric(y.data.f[1,])##convert to a vector, for just the first row of data

library(pspline) ##Using a spline so a derivative maybe calculated from a list of   numeric values
我确信一定有办法避免使用循环,可能是使用plyr包,但我不知道如何做到这一点,也不知道哪个包最适合获得最大导数的值


有人能提供一些见解或建议吗?提前感谢

当x维均匀分布时,一阶差是一阶导数的数值模拟。因此,大致如下:

 which.max( diff ( predict(sm.spline(x, y))$ysmth) ) )
。。。将返回平滑样条线的最大(正)坡度的位置。如果希望最大斜率为负或正,可以在predict()$ysmth周围使用abs()。如果您在使用非有限值时遇到困难,则使用is.finite索引将清除Inf和NaN困难:

predy <- predict(sm.spline(x, y))$ysmth
predx <- predict(sm.spline(x, y))$x
is.na( predy ) <- !is.finite(pred)
plot(predx, predy,  # NA values will not blow up R plotting function,
                   # ...  just create discontinuities.
                  main ="First Derivative")

predy这篇文章有帮助,那么这个错误的第7861个值是多少?你有没有试着用这个函数单独运行?为什么你认为这是循环的问题?在循环的第一行有一个双重赋值。预定的此外,您说您想要最大值,但看起来您的y值的元素数与
y.data.f[j]中的行数相同
@Arun:7861行的值是:`Spec495 Spec500 Spec505 Spec510 Spec515 Spec520 Spec525 7861 0.2617789 0.2661565 0.27277 0.2873747 0.3093497 0.3368941 0.3611916 Spec530 Spec535 Spec540 Spec545 Spec550 7861 0.3771284 0.3845924 0.3885089 0.3913611 0.3918995`@Dwin:我不确定用于双重任务。我基本上希望循环针对每一行运行,这样我就可以得到每一行的最大导数。因此,是的,我正在寻找一个新的列,最大导数值为14901,非常感谢。使用上面的命令,第一行数据的值为6。然而,我得到的原始答案(当我使用命令时)是
0.006666018
,除非您使用dput(y.data.f[1,])发布第一行值,否则我们无法提供帮助。此外,
diff()
方法没有计算分母,您仍然没有澄清是否需要绝对值。非常抱歉。第一行值为:`[1]0.2440790.2505443 0.2606664 0.2775037 0.2983790.3292848 0.3609252[8]0.3838254 0.3952052 0.4002841 0.4049134 0.4065415`。绝对值是不需要的。>max(diff(predict(sm.spline(seq_沿着(vec)*5,vec))$ysmth)/5)[1]0.006328027谢谢DWin,我不确定当有11个元素时,你是否在乘/除5。能解释一下吗?谢谢不过我非常感激
 which.max( diff ( predict(sm.spline(x, y))$ysmth) ) )
predy <- predict(sm.spline(x, y))$ysmth
predx <- predict(sm.spline(x, y))$x
is.na( predy ) <- !is.finite(pred)
plot(predx, predy,  # NA values will not blow up R plotting function,
                   # ...  just create discontinuities.
                  main ="First Derivative")