我有一个植物物种出现数据的矩阵。设置矩阵,以便每一列都是一个物种,每一行都是一个采样位置。我还具有根据某些环境变量对采样位置进行分组的标识符。我想为每个物种创建列总和,但按特定环境变量进行分组。
示例数据集:
javac
因此,现在有20个样地,观察到30种物种,以及5个相关的环境变量。我想生成每个物种观察到的个体总数,并按“管理”分组。我已经尝试过这样的事情:
library(vegan)
data("dune")
data("dune.env")
dune$plot <- c(1:20); dune.env$plot <- c(1:20)
merge(dune, dune.env)
但是我总是会得到关于不正确的暗淡的错误。我不确定如何解决我的问题。理想情况下,结果将是一个具有4行(每种管理类型为1行)的数据帧,其中所有物种(cols 2:31)都已求和。
答案 0 :(得分:0)
使用data.table
:
require(data.table)
a <- merge(dune, dune.env)
setDT(a)
a[, lapply(.SD, sum), by = Management, .SDcols = names(a)[2:31]]
答案 1 :(得分:0)
好吧,几天前我在做类似的事情: How to obtain species richness and abundance for sites with multiple samples using dplyr
要修改@akrun给出的出色答案:
df <- merge(dune, dune.env)
library(dplyr)
df2<- df %>%
group_by(Management) %>%
summarise_at(sum, .vars = vars(Achimill:Callcusp))
答案 2 :(得分:0)
rowsums
完成您需要的操作:
dat <- merge(dune, dune.env)
> rowsum(dat[,2:31], dat$Management)
Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere Bromhord Chenalbu ...
BF 7 0 0 2 4 5 8 0 ...
HF 6 7 0 8 9 2 4 0 ...
NM 2 13 5 0 8 2 0 0 ...
SF 1 28 0 26 0 4 3 1 ...