根据层次结构查找独特的分类学计数

Finding unique taxonomic counts based on hierarchy

我已经搜索过执行此操作的方法,但使用 count(unique()) 不会搜索其他因素。下面是一个示例数据集。

df <- data.frame(Site = c("X1", "X1", "X1"), Date = c(2006, 2006, 2006), TaxonID = c("Chironomidae", "Saetheria", "Chimarra"), Family = c("Chironomidae", "Chironomidae", "Philopotamidae"), Genus = c("-", "Saetheria", "Chimarra"), Count = c(2, 1, 5), stringsAsFactors = FALSE)

+------+------+--------------+----------------+-----------+-------+
| Site | Date |   TaxonID    |     Family     |   Genus   | Count |
+------+------+--------------+----------------+-----------+-------+
| X1   | 2006 | Chironomidae | Chironomidae   | -         |     2 |
| X1   | 2006 | Saetheria    | Chironomidae   | Saetheria |     1 |
| X1   | 2006 | Chimarra     | Philopotamidae | Chimarra  |     5 |
+------+------+--------------+----------------+-----------+-------+

计算 TaxonID 会多算,因为在这种情况下,第 1 行不应被计算在内,因为某些东西被识别为低于该分类级别,即第 2 行。

在此数据集中,计算 Genus 中的唯一值将起作用,但在第 2 行不存在的示例中,这将不起作用。

这是一个截断的 table,其中通常还存在 Phylum、Class 和 Order,并且 TaxonID 可能是这些字段之一中的内容。

我不是 100% 确定这是否会给您正确的结果,但试试这个:

SELECT sum(cnt)
FROM
    (SELECT Family,
            IF(count(DISTINCT Genus)=0, 1, count(DISTINCT Genus)) AS cnt
     FROM your_table
     GROUP BY Family) AS lo;

这可以通过对每个分类级别进行子集化并向数据框中添加一列,然后嵌套 ifelse 语句来完成。如果您发现改进它所取得成就的方法,请告诉我。

在我发布的示例中:

data$GenusN <- ifelse(table(data$Genus)[data$Genus] >1, 0, 1)

对每个分类级别重复,然后根据嵌套的 ifelse 语句求和。

dataNew <- sum(ifelse(data$Taxon == data$Genus, data$GenusN, ifelse(data$Taxon==data$Family, data$FamilyN, 0)))