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

时间:2015-11-07 23:06:07

标签: r plot subset

我的编码问题超出了我的技能水平。我希望有人可以通过指导我完成此任务所需的工具方向来帮助我。

我正在尝试创建一个独特物种数量〜假想岛屿累积面积的图。我的情节的第一点是岛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)

非常感谢任何帮助我指明正确方向的帮助!

1 个答案:

答案 0 :(得分:0)

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

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