将分离的物种数量数据处理成物种丰度矩阵

时间:2014-08-18 15:31:39

标签: r data-manipulation

我希望有人可以帮助R中的一些数据操作,我很难让这个工作,因为数据目前的格式有点奇怪。

我需要一个物种丰富表来运行素食主义者的一些功能。

然而,当我收集数据时,我输入的数据并不是非常兼容,因为我必须按照日期和其他程序所需的其他因素来保持从同一地点收集的物种。

所以我的数据目前看起来像这样:

df <- data.frame (Site=c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3),
species=c("a","a","a","b","b","c","a","b","b","b","c","d","a","b","c","f","f","f"),
Quantity=c(3,1,1,2,3,3,5,12,1,2,4,1,5,6,3,1,1,1))

我试图操纵它的是一个丰富的矩阵,所以像:

colA= c(1,2,3)
colB=c(5,5,5)
colC=c(5,15,6)
colD=c(3,4,3)
colE=c(0,1,0)
colF=c(0,0,1)
colG=c(0,0,2)
df= data.frame (site=colA, SpeciesA=colB, SpeciesB=colC,SpeciesC=colD,SpeciesD=colE,SpeciesE=colF,SpeciesF=colG)

我的第一个计划是遍历每个站点,然后是站点内每个分类单元的第二个循环,然后我将获取每个分类单元的数量总和并将其合并到数据表中,问题出现在我最终会为每个站点提供大量不同列数的表,然后这些表不能绑定到一个表中。

非常感谢任何帮助或建议。

非常感谢。

1 个答案:

答案 0 :(得分:0)

library(reshape2) 
res <- dcast(df, Site~species, value.var="Quantity", sum)
 colnames(res) <- c("site", paste0("Species", LETTERS[c(1:4,6)]))
 res
 #   site SpeciesA SpeciesB SpeciesC SpeciesD SpeciesF
 # 1    1        5        5        3        0        0
 # 2    2        5       15        4        1        0
 # 3    3        5        6        3        0        3