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

R中具有唯一计数和和的多个子集,r,plot,subset,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,

我的编码问题超出了我的技能水平。我希望有人能帮助我,为我指明节省完成这项任务所需的工具的方向

我试图绘制一幅独特物种数量的图,即想象岛屿的累积面积。我的图上的第一点是岛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))
到目前为止,我最好的方法是这样做:

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)

但是对于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

非常感谢。我在我的真实数据集上试过了,但它不起作用,但你教了我一些新的论点,我可以玩。这种方法看起来可以让我得到计算累计物种总数所需的唯一值,但不能计算面积。不过,对于面积来说,这有点棘手,因为值不是唯一的(即,有多个大小相同的孤岛。我可能可以使用cumsum()命令作为独立计算来完成这一部分。再次感谢!我使用了cumsum()生成一个表示岛屿面积的运行累计总数的向量。我无法获得用于我的数据的代码。事实上,我只是在我为这个问题生成的测试数据上尝试了它,但也不起作用。我得到一个错误:tapply中的错误(cumsum(!duplicated(dat$species)),dat$island,max):参数必须具有相同的长度,因此我仍在试图找出如何在添加岛屿时获得唯一物种的累积总数。我已经得到了这段代码中我需要处理的部分。我需要使用的最重要的计算是您上面为“nspecies”编写的计算。我已经让它做了一个cumsum()在我的数据中的重复项上,但它似乎不是从向量中的第一个孤岛开始的。计算发生的顺序很重要。@eyerah我的建议并不假设孤岛的大小是唯一的。
unique(dat[,c('island','size'))$size
孤岛
大小
的唯一组合。该结果的
大小
列应给出孤岛的大小。另一种方法是
合并
数据帧。您的
cumsum
错误表明
dat$物种
的长度与
dat$孤岛
的长度不同对于数据帧来说,我不可能是真的。这让我觉得您的示例数据并不能真正反映您的实际数据。非常感谢您的帮助。我现在已经得到了!