首页 > 解决方案 > 如何绘制R中这些列的物种丰富度与海拔高度?

问题描述

我是 R 的新手。我只是想让自己熟悉这种语言以备将来使用,并在处理和绘制数据方面寻求一些帮助。因此,我从 excel 中导入了具有一定数量列的数据,并且我希望绘制鸟类的物种丰富度与海拔高度的关系。两列中的数据如下所示:

Species Altitude (m) 
Species A 100 
Species B 100 
Species C 100 
Species D 100 
Species E 100 
Species C 200 
Species D 200 
Species E 200 
Species A 300 
Species C 300 
Species D 300 
Species E 300 
Species B 400 
Species E 400 
Species B 500 
Species D 500

我的问题是我将如何操纵数据来总结在每个高度发现的物种数量并将其呈现为一个图而不使用 ggplot2?谢谢。

标签: r

解决方案


您可以使用该函数aggregate()按物种或海拔高度聚合数据集,使用任何现有函数或定义新函数。

在您的情况下,我将只使用该函数length()进行聚合,因为它返回每个组中的案例数。如果您在一个高度有多个相同物种的计数,那么定义一个返回不同物种数量的函数可能是明智之举。

您还可以使用函数来计算物种的熵(如果您想获得多样性)或基尼系数(如果您想衡量优势)。

luniq = function(v){
  return(length(unique(v)))
}

d = data.frame("Species"=c("Species A","Species B","Species C","Species D",
                           "Species E","Species C","Species D","Species E",
                           "Species A","Species C","Species D","Species E",
                           "Species B","Species E","Species B","Species B"),
               "Altitude (m)"=c(100,100,100,100,
                                100,200,200,200,
                                300,300,300,300,
                                400,400,500,500))

agg1 = aggregate(d[["Species"]]~d[["Altitude..m."]],FUN=length)
agg2 = aggregate(d[["Species"]]~d[["Altitude..m."]],FUN=luniq)


d = data.frame("Number.Species"=agg1[,2],
               "Number.Different"=agg2[,2],
               row.names=agg[,1])

barplot(t(as.matrix(d)),beside=T,legend.text=names(d))

请注意,我更改了海拔 500 以包含同一物种的两个样本。所以,计数仍然是 2,但不同物种的数量是 1。

在此处输入图像描述


推荐阅读