如何将物种x站点数据帧转换为矩阵?

时间:2017-10-25 00:29:18

标签: r dataframe matrix data-conversion

我有一个数据框(以excel文件的形式),包含各行采样点和每个物种的列(sp)。一种非常标准的社区生态物种,按地点矩阵但以数据框格式。

示例数据(注意我添加了一个站点名称列,就像它在我的excel文件中一样):

sites<-c("SiteA", "SiteB", "SiteC")
sp1<-c(0, 5, 2)
sp2<-c(0, 1, 2)
sp3<-c(1, 1, 4)
comm<-data.frame(sites,sp1,sp2,sp3)

在我的情况下,我只有一个这样的数据帧或一个“情节”。我需要将此数据帧转换为如下格式的矩阵:

    sp   site     plot  Abundance
1   sp1     A    1        0
2   sp2     A    1        0
3   sp3     A    1        1
4   sp1     B    1        5
5   sp2     B    1        5
6   sp3     B    1        1
7   sp1     C    1        2
8   sp2     C    1        2
9   sp3     C    1        4

我已经研究过使用上一篇文章中描述的技术 (Collapse species matrix to site by species matrix) 但最终结果不同于我需要我的矩阵最终看起来像我上面所示的地雷。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用重塑包:

library(reshape2)
comm.l <- melt(comm)
comm.l$plot <- 1

答案 1 :(得分:0)

使用dplyrtidyr的解决方案。

library(dplyr)
library(tidyr)

comm2 <- comm %>%
  gather(sp, Abundance, starts_with("sp")) %>%
  mutate(site = sub("Site", "", sites), plot = 1) %>%
  select(sp, site, plot, Abundance) %>%
  arrange(site)
comm2
   sp site plot Abundance
1 sp1    A    1         0
2 sp2    A    1         0
3 sp3    A    1         1
4 sp1    B    1         5
5 sp2    B    1         1
6 sp3    B    1         1
7 sp1    C    1         2
8 sp2    C    1         2
9 sp3    C    1         4