我有一个数据框(以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) 但最终结果不同于我需要我的矩阵最终看起来像我上面所示的地雷。
非常感谢任何帮助。
答案 0 :(得分:1)
使用重塑包:
library(reshape2)
comm.l <- melt(comm)
comm.l$plot <- 1
答案 1 :(得分:0)
使用dplyr
和tidyr
的解决方案。
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