如何根据光谱名称在pavo软件包(R)中聚合光谱

时间:2019-04-23 12:28:24

标签: r

我正在使用R中的pavo软件包分析花朵的色谱,需要对同一物种的所有光谱求平均值。光谱全部集中在一个文件夹中,因此我需要分别阅读所有光谱并将其取平均值,以便最终得到每种植物物种的一个平均光谱。我对每种物种有不同数量的光谱。

我如何指定我要基于的聚合光谱(例如) 每个频谱的前四个字母?在下面的示例中,我想汇总所有多gal光谱和所有larcun光谱。的 pavo手册对我没有帮助,我在此看不到有关pavo的任何帖子 论坛。预先感谢您的帮助。

我尝试使用aggspec函数,因为我没有设法根据每个质谱图文件名的首字母进行汇总。

到目前为止,我只设法读取所有光谱,绘制它们,并分别获取每个文件所需的变量(色相,色度,色度),但我需要按物种对光谱进行平均。

library(pavo)
#I create fake spectra, for two individuals of polygal species and three of larcun species
wl = seq(300, 560, 10)
polyg1 = c(2.381,  2.758,  2.923,  2.883,  3.127,  3.365,  3.364,  3.341,  3.42,  3.507,  3.534,  3.654, 3.782, 3.96, 4.125, 4.4,  4.691,  5.275,  5.888, 6.563,  7.275,  8.138,  8.866,  9.591, 10.121,  10.565,  10.895) 
polyg22 = spec1 + runif(27, 0, 2)
larcun1 = spec1 + runif(27, 0, 2)
larcun2 = spec1 + runif(27, 0, 2)
larcun3 = spec1 + runif(27, 0, 2)

all.specs = cbind (wl, polyg1, polyg22, larcun1, larcun2, larcun3)
spectra1 = as.rspec(all.specs, interp = FALSE)
spectra.smooth = procspec(spectra1, opt = "smooth")
plot(spectra.smooth)
explorespec(spectra.smooth)

1 个答案:

答案 0 :(得分:0)

考虑使用pavo::aggspec的特殊 by 变体:

  

by
... ...一个向量,其中包含光谱数据框中各列的标识(在这种情况下,该功能将应用于   每组光谱具有相同的标识);

具体来说,创建一个字符向量,以标记所需的种类,这些种类按列标题的前五个字母分组。注意: wl (如果存在)在此调用中将被忽略。

species <- substr(names(spectra.smooth), 1, 5)

species_agg <- aggspec(spectra.smooth, by=species, FUN=mean)

输出(以列标题作为字符向量中的值)

species_agg
#     wl  species1  species2  species3  ...
# 1  100   ##.####   ##.####   ##.####   
# 2  101   ##.####   ##.####   ##.####   
# 3  102   ##.####   ##.####   ##.####   
# ...