R 中具有唯一计数和总和的多个子集

Multiple subsets with unique counts and sums in R

我有一个超出我技能水平的编码问题。我希望有人可以帮助我指出我需要的工具的方向,以节省地完成这项任务。

我正在尝试创建一个关于独特物种数量~假想岛屿累积面积的图。我图上的第一点是岛屿 1 上的物种数量,第二点是岛屿 1 和 2 上的物种累计数量,第三点是岛屿 1,2 上的物种累计数量,& 3等

我总共有30个岛屿,我的数据是这样的:

species=c("ted", "ben", "ira", "nic", "meg", "ira", "nic", "ted", "ben", "kim" )
island=c(1,1,1,2,2,2,2,3,3,3)
size=c(10,10,10,20,20,20,20,30,30,30)
dat=data.frame(species, island, size)

到目前为止,我最好的方法是做这样的事情:

A=subset(dat, island="1", select=c(name, size)))
B=subset(dat, island%in% c("1", "2"), select=c(name, size))
C=subset(dat, island%in% c("1", "2", "3"), select=c(name, size))

然后我可以使用 length() 和 unique() 函数来计算每个假想岛屿(A、B、C 等)上的物种数量。我还需要找出每个假想的累积岛的面积(在这种情况下,A 的大小为 10,B 的大小为 30,C 的大小为 60)。

Alength=length(unique(A$species))
Asum=sum(unique(A$size)))
Blength=length(unique(B$species))
Bsum=sum(unique(B$size)))
Clength=length(unique(C$species))
Csum=sum(unique(C$size)))

但这对于 30 个岛屿来说会变得非常乏味,我想学习如何以正确的方式做到这一点。

因此最终产品将是一组新的假想岛屿,其中包含多个物种和一个区域。类似于:

imaginaryisland=c("A","B","C")
numberofspecies=c(3,5,6) 
size=c(10, 30, 60)

如能为我指明正确的方向,我们将不胜感激!

这是一种方法,它将物种的累积数量计算为每个岛屿非重复物种名称累积数量的最大值:

data.frame(island=unique(dat$island),
           nspecies=tapply(cumsum(!duplicated(dat$species)), dat$island, max),
           size=unique(dat[, c('island', 'size')]$size))

##   island nspecies area
## 1      1        3   10
## 2      2        5   20
## 3      3        6   30