这可能更像是一道数学题,而不是一个R题。
是否有办法使数据在特定的点上匹配?
下面是一个例子:
peak_a<-c(0.1,0.4,0.6,0.8,0.9,1,0.9,0.8,0.6,0.4,0.1,0.05,0.04)
peak_b<-c(0.04,0.06,0.1,0.2,0.3,0.45,0.7,0.9,1.1,1.3,1.35,1.3,1.15,1,0.85,0.65,0.5)
abs<-c(peak_a,1.5*peak_b)
abs2<-c(1.5*peak_a,0.5*0.9*peak_b)
abs3<-c(0.9*peak_a,peak_b)
plot(abs, type="l")
lines(abs2,col="red")
lines(abs3,col="blue")

我希望所有三条曲线在A峰都有相同的高度,同时保持A峰和B峰之间的比值。在我的实际数据中,我有大约100光谱,每个峰有5个峰值。这些峰值总是在x轴值的相同范围内,我希望在保持所有这些峰值之间的正确比率的同时,对每个峰值重新确定它们。
发布于 2020-03-25 14:00:58
您可以在直线的某个点按比例缩放每一行,如下所示:
peak_a<-c(0.1,0.4,0.6,0.8,0.9,1,0.9,0.8,0.6,0.4,0.1,0.05,0.04)
peak_b<-c(0.04,0.06,0.1,0.2,0.3,0.45,0.7,0.9,1.1,1.3,1.35,1.3,1.15,1,0.85,0.65,0.5)
abs<-c(peak_a,1.5*peak_b)
abs2<-c(1.5*peak_a,0.5*0.9*peak_b)
abs3<-c(0.9*peak_a,peak_b)
plot(abs, type="l")
lines(abs2*abs[6]/abs2[6],col="red")
lines(abs3*abs[6]/abs3[6],col="blue")

一些来自您的曲线的实际数据可能有助于更好地解决您的需求。
下面是一种“自动化”过程的方法,因为您说您有许多曲线:
peak_a<-c(0.1,0.4,0.6,0.8,0.9,1,0.9,0.8,0.6,0.4,0.1,0.05,0.04)
peak_b<-c(0.04,0.06,0.1,0.2,0.3,0.45,0.7,0.9,1.1,1.3,1.35,1.3,1.15,1,0.85,0.65,0.5)
abs<-c(peak_a,1.5*peak_b)
abs2<-c(1.5*peak_a,0.5*0.9*peak_b)
abs3<-c(0.9*peak_a,peak_b)
abs4<-c(0.75*peak_a,peak_b)
abs5<-c(0.88*peak_a,peak_b)
plot(abs, type="l")
ListOfCurves <- sapply(2:5, function(x) paste0("abs",x))
AllCurves <- lapply(ListOfCurves, function(x) eval(parse(text=x)))
NormalizedCurves <- lapply(AllCurves, function (x) x*abs[6]/x[6])
lapply(1:4, function(x) lines(NormalizedCurves[[x]],col=x))

https://stackoverflow.com/questions/60850264
复制相似问题