我是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?谢谢。
答案 0 :(得分:0)
您可以对每个aggregate
使用sum
到Altitude
Species
,然后使用barplot
进行绘制。
tmp <- aggregate(Altitude~Species, df, sum)
barplot(tmp$Altitude, names.arg = tmp$Species,xlab = 'Species', ylab = 'Altitude')
数据
df <- structure(list(Species = c("SpeciesA", "SpeciesB", "SpeciesC",
"SpeciesD", "SpeciesE", "SpeciesC", "SpeciesD", "SpeciesE", "SpeciesA",
"SpeciesC", "SpeciesD", "SpeciesE", "SpeciesB", "SpeciesE", "SpeciesB",
"SpeciesD"), Altitude = c(100L, 100L, 100L, 100L, 100L, 200L,
200L, 200L, 300L, 300L, 300L, 300L, 400L, 400L, 500L, 500L)),
class = "data.frame", row.names = c(NA, -16L))
答案 1 :(得分:0)
## loding the data
species <- read.csv(text='Species,Altitude
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', header=T)
species
#> Species Altitude
#> 1 Species A 100
#> 2 Species B 100
#> 3 Species C 100
#> 4 Species D 100
#> 5 Species E 100
#> 6 Species C 200
#> 7 Species D 200
#> 8 Species E 200
#> 9 Species A 300
#> 10 Species C 300
#> 11 Species D 300
#> 12 Species E 300
#> 13 Species B 400
#> 14 Species E 400
#> 15 Species B 500
#> 16 Species D 500
## transforming species to data.table
data.table::setDT(species)
species = species[, .(`Number of Species` = .N), by = c("Altitude")]
barplot(species$`Number of Species`, names.arg=species$Altitude, xlab='Altitude', ylab='Number of Species')
.N
给出当前组的行数,by
指定按哪一列进行分组。这将返回包含data.table
和Altitude
列的Number of Species
。
有关data.table
的介绍,可以说是data.frame
操作最快的软件包之一,请查看vignette。
答案 2 :(得分:0)
您可以使用函数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。