2017-10-12 2 views
0

Ich habe nach Methoden gesucht, dies zu tun, aber die Verwendung von count (unique()) sucht nicht nach anderen Faktoren. Ein Beispieldatensatz ist unten.Suche nach eindeutigen taxonomischen Zählwerten basierend auf der Hierarchie

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

Counting TaxonID würde über rechnen, da in diesem Fall die Zeile 1 sollte nicht aufgrund geringerer identifiziert etwas gezählt werden, als dieser taxonomischen Ebene, dh Zeile 2.

In diesem Datensatz, die eindeutigen Werte in Zählen Genus wird funktionieren, aber in einem Beispiel, in dem Zeile 2 nicht vorhanden ist, wird dies nicht funktionieren.

Dies ist eine abgeschnittene Tabelle, in der normalerweise auch Phylum, Klasse und Reihenfolge vorhanden sind, und TaxonID kann etwas in einem dieser Felder sein.

+2

Ich bin mir nicht sicher, ob ich verstehe, was Sie fragen. –

+0

Ich hatte Angst, ich wäre nicht klar genug. Ich suche im Grunde nach der Anzahl der einzigartigen Gruppen. Vielleicht ein anderes Beispiel wäre, roter Tisch, roter Stuhl, roter NA, blauer NA. Hier sind die rote Tabelle, der rote Stuhl und die blaue NA eindeutig, und der höhere Ebenenfaktor, die Farbe, wird ignoriert, wenn ein niedrigerer Ebenenfaktor, ein Objekt, existiert, aber nicht ignoriert wird, wenn es keinen niedrigeren Ebenenfaktoreintrag gibt. Klärt es das besser? –

+0

Und was erwarten Sie als Folge davon? Ich meine in deinem Posted Beispiel. 2 oder 3? –

Antwort

0

Dies kann mit subsetting jede taxonomischen Ebene und das Hinzufügen einer Spalte zu Datenrahmen durchgeführt werden, und dann verschachtelte ifelse-Anweisungen. Wenn Sie Möglichkeiten sehen, das zu verbessern, was es bewirkt, lassen Sie es mich wissen.

Im Beispiel I posted:

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

Wiederholen Sie für jede taxonomische Ebene, dann auf der Grundlage Summe auf ifelse Aussagen verschachtelt.

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

Ich bin nicht 100% sicher, ob dies das richtige Ergebnis geben, sondern versucht, diese:

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

konnte ich das nicht funktionieren, aber wegen SQLite nicht IF oder AS. Ich habe versucht, herauszufinden, wie CASE zu verwenden ist. Ich habe tatsächlich eine Lösung in R gefunden, die ich als Antwort posten werde. Vielen Dank für Ihre Hilfe. –

Verwandte Themen