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

如何根据光谱名称聚合pavo包(R)中的光谱,r,R,我正在用R中的pavo软件包分析花的颜色光谱,需要对同一物种的所有光谱进行平均。光谱都在一个文件夹中,所以我需要单独阅读所有光谱,并对它们进行平均,以便最终得到每个植物物种的一个平均光谱。我对每个物种都有不同数量的光谱 我如何向pavo指定我要基于的光谱聚合,例如, 每个光谱的前四个字母?在下面的例子中,我想汇总所有的polygal光谱和所有的Larchun光谱。这个 pavo手册对我没有帮助,我也没有看到任何关于pavo的帖子 论坛。提前感谢您的帮助 我尝试了aggspec函数,但我没有根据每

我正在用R中的pavo软件包分析花的颜色光谱,需要对同一物种的所有光谱进行平均。光谱都在一个文件夹中,所以我需要单独阅读所有光谱,并对它们进行平均,以便最终得到每个植物物种的一个平均光谱。我对每个物种都有不同数量的光谱

我如何向pavo指定我要基于的光谱聚合,例如, 每个光谱的前四个字母?在下面的例子中,我想汇总所有的polygal光谱和所有的Larchun光谱。这个 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)

考虑使用特殊的by变量:


。。。包含光谱数据框中列标识的向量(在这种情况下,函数将应用于 共享相同标识的每组光谱)

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

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

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

根据R标记(悬停查看):请提供最小值和所需输出。对数据使用
dput()
。那么,您能否提供一个示例:
dput(head(spectra.smooth[,1:5],10))
?我现在添加了一些规范来说明我的问题。代码不是很优雅,但我成功地创建了一个简单的示例来说明我的数据是什么样子的。谢谢对它工作得很好。非常感谢你的冻糕!很高兴听到这个消息,也很乐意帮忙。一定要注意这种说法!完成。现在已经给予了适当的承认,接受了你的回答。我也尝试过为你的答案“投票”,但它说它不会显示出来,因为我没有使用太多Stackoverflow,所以我的声誉很低,无法显示我的投票。
species_agg
#     wl  species1  species2  species3  ...
# 1  100   ##.####   ##.####   ##.####   
# 2  101   ##.####   ##.####   ##.####   
# 3  102   ##.####   ##.####   ##.####   
# ...