2017-10-12 5 views
0

J'ai recherché des méthodes pour cela, mais l'utilisation de count (unique()) ne recherche pas d'autres facteurs. Un exemple de jeu de données est ci-dessous.Recherche de dénombrements taxonomiques uniques basés sur la hiérarchie

+------+------+--------------+----------------+-----------+-------+ 
| 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 serait plus compter, puisque dans ce cas la ligne 1 ne doit pas être prise en compte en raison de quelque chose identifié inférieur à ce niveau taxonomique, à savoir la ligne 2.

Dans cet ensemble de données, en comptant les valeurs uniques Le genre fonctionnera, mais dans un exemple où la ligne 2 n'est pas présente, ce ne sera pas le cas.

Ceci est une table tronquée, où normalement Phylum, Class et Order sont également présents, et TaxonID peut être quelque chose dans l'un de ces champs.

+2

Je ne sais pas si je comprends ce que vous demandez. –

+0

J'avais peur de ne pas être assez clair. Je cherche essentiellement à trouver le nombre de groupes uniques. Peut-être un autre exemple serait, table rouge, chaise rouge, NA rouge, NA bleu. Ici, la table rouge, la chaise rouge et la NA bleue sont uniques et le facteur de niveau supérieur, la couleur, est ignoré si un facteur de niveau inférieur, objet, existe mais n'est pas ignoré s'il n'y a pas d'entrée de facteur de niveau inférieur. Cela clarifie-t-il mieux? –

+0

Et qu'attendez-vous à la suite de cela? Je veux dire dans votre exemple posté. 2 ou 3? –

Répondre

0

Cela peut se faire avec sous-ensembles de chaque niveau taxonomique et l'ajout d'une colonne à votre trame de données, et puis les instructions ifelse imbriquées. Si vous voyez des façons d'améliorer ce qu'il accomplit, faites le moi savoir.

Dans l'exemple que j'ai posté:

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

Répétez l'opération pour chaque niveau taxonomique, puis additionnez basé sur imbriqué ifelse déclarations.

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

Je ne suis pas sûr à 100% si cela vous donnera le résultat correct mais essayez celui-ci:

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

Je ne pouvais pas obtenir ce travail, mais en raison de SQLite ne pas avoir IF ou AS. J'essayais de comprendre comment utiliser CASE. En fait, j'ai trouvé une solution dans R que je posterai comme réponse. Merci pour votre aide si. –