2017-10-12 92 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中找到了一個解決方案,不過我會作爲答案發布。儘管謝謝你的幫助。 –