小编Lor*_*ren的帖子

R计算数据帧或数组中相邻相同值的数量

我有一个来自流底的分类基质大小的数据集.由于我收集数据的方式,我可以在空间上将它们排列成一个矩阵,在那里它们与邻居的关系得以保留(即左边,前面等).一个例子看起来像这样:

     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)

r geospatial dataframe data.table

5
推荐指数
1
解决办法
251
查看次数

将多个条件语句应用于一对列表或向量以分配单个字符属性

对于带有多个测量变量的条件语句,我遇到了一些绊脚石.简而言之,我在矢量形式中有两个测量的栖息地梯度,一个基于栖息地梯度值的栖息地类型的分类方案,我想写一些代码,允许我将所有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)

if-statement r

2
推荐指数
1
解决办法
5561
查看次数

标签 统计

r ×2

data.table ×1

dataframe ×1

geospatial ×1

if-statement ×1