我有一个包含两列x,y的数据集,如下所示:
x y
0.5789474 0.0011382324
1.0000000 0.0024540588
0.8000000 0.0017039382
0.7272727 0.0014921618
0.8421053 0.0018399977
0.8611111 0.0019049152
0.3750000 0.0007843210
0.7837838 0.0016542579
0.7222222 0.0014784711
0.7619048 0.0015895130
0.7435897 0.0015372644
0.4375000 0.0008791528
0.8750000 0.0019537960
0.6666667 0.0013359048
0.8750000 0.0019537960
0.8571429 0.0018911749
0.6896552 0.0013931524
1.0000000 0.0024540588
0.9285714 0.0021543502
0.9523810 0.0022499579
绘制这些值将产生如下图
我的目标是找到曲线的斜率或变化率最大的x和y值。折弯或曲线最锐利的地方。我尝试过,
(lead(y)-y)/(lead(x)-x)
,这是行不通的。任何建议或意见,不胜感激。预先感谢。
答案 0 :(得分:1)
见到你很高兴,野牛
我认为, 排序后,您的代码运行良好。
我不知道您为什么说(lead(y)-y)/(lead(x)-x)
无效。
参见下面的代码:
x <- sort(c(
0.5789474,1.0000000,
0.8000000,0.7272727,
0.8421053,0.8611111,
0.3750000,0.7837838,
0.7222222,0.7619048,
0.7435897,0.4375000,
0.8750000,0.6666667,
0.8750000,0.8571429,
0.6896552,1.0000000,
0.9285714,0.9523810
))
y <- sort(c(
0.0011382324,0.0024540588,
0.0017039382,0.0014921618,
0.0018399977,0.0019049152,
0.0007843210,0.0016542579,
0.0014784711,0.0015895130,
0.0015372644,0.0008791528,
0.0019537960,0.0013359048,
0.0019537960,0.0018911749,
0.0013931524,0.0024540588,
0.0021543502,0.0022499579
))
> (lead(y)-y)/(lead(x)-x)
[1] 0.001517309 0.001831632 0.002253465 0.002490271 0.002619790
[6] 0.002710761 0.002764148 0.002852761 0.002959226 0.003063622
[11] 0.003231410 0.003403282 0.003462603 0.003519415 NaN
[16] 0.003743680 0.004015511 0.004286123 NaN NA
x[which.max((lead(y)-y)/(lead(x)-x))]
y[which.max((lead(y)-y)/(lead(x)-x))]
答案 1 :(得分:0)
我正在给指针:
df = read.table(text="
0.5789474 0.0011382324
1.0000000 0.0024540588
0.8000000 0.0017039382
0.7272727 0.0014921618
0.8421053 0.0018399977
0.8611111 0.0019049152
0.3750000 0.0007843210
0.7837838 0.0016542579
0.7222222 0.0014784711
0.7619048 0.0015895130
0.7435897 0.0015372644
0.4375000 0.0008791528
0.8750000 0.0019537960
0.6666667 0.0013359048
0.8750000 0.0019537960
0.8571429 0.0018911749
0.6896552 0.0013931524
1.0000000 0.0024540588
0.9285714 0.0021543502
0.9523810 0.0022499579",header=FALSE)
现在计算斜率:
slope= diff(df$V2)/diff(df$V1)
从最大斜率中获取相应的x,y点:
df[which.max(slope),]
输出:
V1 V2
18 1 0.002454059
请随时纠正我!