2017-10-12 95 views
0

我已经搜索了这样做的方法,但是使用count(unique())不搜索其他因素。以下是一个示例数据集。根据层次结构查找独特的分类计数

+------+------+--------------+----------------+-----------+-------+ 
| 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行。

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

这是一个截断表,其中通常是门,类和顺序也存在,并且TaxonID可能是其中一个字段中的某个字段。

+2

我不知道我是否明白你在问什么。 –

+0

我害怕我不够清楚。我基本上希望找到唯一组的数量。也许另一个例子是,红色的桌子,红色的椅子,红色的NA,蓝色的NA。在这里,红色表格,红色椅子和蓝色NA是唯一的,如果存在较低级别的因素,则较高级别的因素颜色将被忽略,但如果没有较低级别的因素条目NA,则不会被忽略。这是否更好地澄清它? –

+0

作为此结果的期望是什么?我的意思是在你发布的例子中。 2或3? –

回答

0

这可以用每个子集化分类级别,并添加一列到您的数据帧进行,并然后嵌套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))) 
0

我不是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; 
+0

我无法得到这个工作,但由于SQLite没有IF或AS。我试图弄清楚如何使用CASE。我实际上在R中找到了一个解决方案,不过我会作为答案发布。尽管谢谢你的帮助。 –