mein Datenrahmen (bact) hat ~ 4500 Zeilen (bakterielle Taxa) und 19 nützliche Spalten (meist Proben). Dies ist die Ausgabe von Metegenomics-Daten, die Rang-ID-Informationen (geordneter Faktor) und Genübereinstimmungen in mehreren Stichprobenspalten (p'x ') enthalten, sowie eine Spalte mit Summen von Genübereinstimmungen über Taxa (Summe) hinweg. Ich wollte nach der Bereinigung der Zeilen in das 'Long'-Format umwandeln.Filter große Datenmenge mit geordneten Faktoren, abhängig von anderen Werten in R mit dplyr?
Das Problem ist: Es gibt viele überlappende Taxa (geordnete Taxa, die nicht klassifiziert sind, und untergeordneten Taxa, die eine Klassifizierung (namen) hat), und das Ziel für die Downstream-Datenanalyse und grafische Darstellung ist phylogenetisch hat relevante Taxa Beschreibungen mit den Daten (in diesem Fall Gen entspricht).
Zum Beispiel:
rankID taxon total
0.2.1 Acidobacteria 994577
0.2.1.1 Acidobacteria 917570
0.2.1.1.1 11B-2 3
0.2.1.1.1.1 unclassified 3
0.2.1.1.1.1.1 unclassified 3
0.2.1.1.2 AT-s3-28 2975
0.2.1.1.2.1 unclassified 2975
0.2.1.1.2.1.1 unclassified 2975
Ich möchte Entferne alle Zeilen, die den gleichen Wert in der ‚Gesamt‘ Spalte aufweisen und eine höhere ‚rankID‘ (in diesem Fall: 0,2. 1.1.1; 0.2.1.1.1.1; 0.2.1.1.2.1; 0.2.1.1.2.1.1). Hinweis: Ich möchte nicht alle "nicht klassifiziert" in Taxon entfernen, weil diese Zeiten tatsächlich notwendig sind, um zu halten. Hier
ist das, was ich dachte, könnte funktionieren:
bact<- read.csv('cSSU_bacteria_full.csv')
str(bact)
bact$rankID <- factor(bact$rankID, ordered = TRUE)
library(dplyr)
bact %>%
filter(!(any(order(levels(rankID)) < order(levels(rankID)) & total == total)))
Ziel redundante Zeilen zu entfernen ist, halten die niedrigsten Ebene Taxon, wenn die Summen gleich sind, also Taxa zu entfernen, die sich gegenseitig erklären, aber man klassifiziert (hat einen Namen) und die anderen sind nicht.
Vielen Dank im Voraus.