我有一个数据框,其中有四个栖息地的样本超过八个月。每个月从每个栖息地收集十个样本。计算每个样本中物种的个体数量。下面的代码生成一个类似结构的较小数据帧。
# Pseudo data
Habitat <- factor(c(rep("Dry",6), rep("Wet",6)), levels = c("Dry","Wet"))
Month <- factor(rep(c(rep("Jan",2), rep("Feb",2), rep("Mar",2)),2), levels=c("Jan","Feb","Mar"))
Sample <- rep(c(1,2),6)
Species1 <- rpois(12,6)
Species2 <- rpois(12,6)
Species3 <- rpois(12,6)
df <- data.frame(Habitat,Month, Sample, Species1, Species2, Species3)
我想按月汇总所有采样物种的个体总数。我正在使用ddply
(首选),但我愿意接受其他建议。
我得到的最接近的是将每列的总和相加,如此处所示。
library(plyr)
ddply(df, ~ Month, summarize, tot_by_mon = sum(Species1) + sum(Species2) + sum(Species3))
# Month tot_by_mon
# 1 Jan 84
# 2 Feb 92
# 3 Mar 67
这行得通,但我想知道是否有一种通用方法来处理“未知”物种数量的案例。也就是说,第一个物种总是从第 4 列开始,但最后一个物种可能在第 10 列或第 42 列。我不想将实际物种名称硬编码到摘要函数中。请注意,物种名称差异很大,例如 Doryflav 和 Pheibica。