我有一个来自流底的分类基质大小的数据集.由于我收集数据的方式,我可以在空间上将它们排列成一个矩阵,在那里它们与邻居的关系得以保留(即左边,前面等).一个例子看起来像这样:
P.1 P.2 P.3 P.4 P.5
T 1 G C C P C
T 2 P C B G C
T 3 SI SI C B C
T 4 SI BR BR SI SI
T 5 BR CL BR BR B
T 6 BR BR BR BR C
Run Code Online (Sandbox Code Playgroud)
其中P(n)是从左到右穿过河流的横断面上的实际点测量,并且T(n)给出从上游到下游的横断面.如您所见,某些基板类型(特别是基岩,"BR",在此样本中)具有比其他类型更大的相邻贴片.这在生态学上是有意义的,可能不仅仅是样本中BR的百分比.
我的问题是:是否有一种简单的方法来计算彼此相邻的相同类型的基板测量数量?注意,相邻的角也被认为是相邻的.
编辑以下非常有用的评论:
示例输出将是每种类型的补丁的列表,以及每个补丁中的测量数量.它可能看起来像这样:
$BR
[1] 9
$B
[1] 1 1
$C
[1] 4 3 1
$P
[1] 1 1
$G
[1] 1 1
$SI
[1] 3 2
Run Code Online (Sandbox Code Playgroud) 对于带有多个测量变量的条件语句,我遇到了一些绊脚石.简而言之,我在矢量形式中有两个测量的栖息地梯度,一个基于栖息地梯度值的栖息地类型的分类方案,我想写一些代码,允许我将所有5K样本分类为一个使用两种测量的栖息地类型.如果我一次交一个样本,我可以生成一些代码,这些代码可以给我一个很好的输出:
(简化版)
hab.assign<-function(HabA,HabB){
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 1")} else
if(HabA > 5 & HabB < 5){
habitat<-c("Habitat Type 2")} else
if(HabA < 5 & HabB > 5){
habitat<-c("Habitat Type 3")} else
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 4")}
habitat
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我编写一段代码将该函数应用于整个5K样本中的两个向量,请说如下:
all.habs<-function(HabA,HabB){
n<-length(HabA)
hab.units<-vector("character",n)
hab.assign<-function(HabA,HabB){
if(HabA < 5 & HabB < 5){
habitat<-c("Habitat Type 1")} else
if(HabA > 5 & HabB < 5){
habitat<-c("Habitat Type 2")} else
if(HabA < 5 & HabB …Run Code Online (Sandbox Code Playgroud)