我如何将 species x 站点数据框转换为矩阵?

How would I convert a species x site dataframe into a matrix?

我有一个数据框(以 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)

在我的情况下,我只有这些数据帧之一或一个 "plot"。我需要将此数据框转换为如下格式的矩阵:

    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

我研究了使用上一篇 post 中描述的技术 () 但最终结果不同于我需要我的矩阵最终看起来像我上面显示的那样的地雷。

如有任何帮助,我们将不胜感激。

使用整形包:

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

使用 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