Seite 1 von 2

Filtern

Verfasst: Fr Dez 06, 2019 3:10 pm
von wbart
Ich werde wahnsinnig. So schwer kann es doch nicht sein! Ich habe ein Objekt mit ca 1000 Werten. Tibble, Data Frame, vector alles schon mal auprobiert.

Code: Alles auswählen

 dput(head(naba_ecm))
structure(list(NABA_MATRISOME = c("A2M", "A2ML1", "ABI3BP", "AC010330.1", 
"ACAN", "ADAM10")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))
> 
Anhand dieses Objektes möchte ich eine zweites Objekt filtern.

Code: Alles auswählen

> dput(head(Log2TPM))
structure(list(Name = c("LOC389834", "LOC100233156", "LOC107987401", 
"LOC105379566", "LOC105379565", "LOC105379564"), TMP1 = c(1.0409485246248, 
3.97952237211088, 0, 0.235322680993796, 0.457426190887988, 0), 
    TMP2 = c(1.01009233638769, 3.77763012059746, 0, 0, 0, 0), 
    TMP3 = c(1.19744396726423, 3.80470411235141, 0, 0, 0.491288731897442, 
    0), TMP4 = c(1.01796465388372, 3.5315187049757, 0.0765399411584887, 
    0, 0, 0), TMP5 = c(0.996465398884609, 3.82304618079213, 0, 
    0, 0, 0.0369407354649453), TMP6 = c(1.17786677887261, 3.69650578993945, 
    0, 0.0656012617053121, 0, 0), TMP7 = c(1.10651583126625, 
    4.04688389751188, 0, 0, 0, 0), TMP8 = c(1.13575811890208, 
    3.52609385823907, 0, 0, 0, 0)), row.names = c("LOC389834", 
"LOC100233156", "LOC107987401", "LOC105379566", "LOC105379565", 
"LOC105379564"), class = "data.frame")
> 
Ich möchte also die zweite Tabelle auf die Zeilen reduzieren die mit dem ersten Objekt übereinstimmen.

Wie geht das. Ich habe filter und subset versucht aber nichts klappt.

Kann mir jemand das Procedere verraten?

Gruß
Werner (genervt)

Re: Filtern

Verfasst: Fr Dez 06, 2019 3:26 pm
von Athomas
Ich möchte also die zweite Tabelle auf die Zeilen reduzieren die mit dem ersten Objekt übereinstimmen.
:?:

Re: Filtern

Verfasst: Fr Dez 06, 2019 3:54 pm
von wbart
Filtern. z.B. habe ich es so versucht:

Code: Alles auswählen

filter(Log2TPM,Log2TPM$Name==naba_ecm)
.

Da bekomme ich dann aber die Fehlermeldung: "Error: Result must have length 38552, not 1026"

Mit subset bekomme ich eine Auswahl mit 0 Observierungen.

Code: Alles auswählen

subset(Log2TPM,Log2TPM$Name==naba_ecm)

Re: Filtern

Verfasst: Fr Dez 06, 2019 4:02 pm
von ruedi_br
Könnte sowas gemeint sein wie in viewtopic.php?f=7&t=1972?
Grüße
Ruedi

Re: Filtern

Verfasst: Fr Dez 06, 2019 4:20 pm
von wbart
Eigentlich nicht.
Ich möchte eine Tabelle filtern. So wie wenn man einen festen Wert in einer Spalte hat. z.B. filter(data, data$colname > 2), nur dass ich halt 1000 Bedingungen habe und diese in einer variablen gespeichert habe.

Re: Filtern

Verfasst: Fr Dez 06, 2019 4:23 pm
von Athomas
Guck Dir bitte mal an, welche Daten Du zur Verfügung gestellt hast - und sag mir dann, was von der zweiten Tabelle mit der ersten übereinstimmen soll!?

Re: Filtern

Verfasst: Fr Dez 06, 2019 4:50 pm
von wbart
Die Werte die bei naba_ecm stehen, also "A2M", "A2ML1", "ABI3BP" sind das Selektionkriterium.
Sie müssen in Log2TPM in Name = c("LOC389834", "LOC100233156", etc) vorhanden sein.
Alle Werte die dieses Kriterium nicht erfüllen möchte ich aus Log2TPM entfernen.

Re: Filtern

Verfasst: Fr Dez 06, 2019 4:58 pm
von wbart
Habe das Problem jetzt tatsächlich mit einem left join gelöst bekommen. Ich denke immer noch das das mit filtern eigenlich gehen müsste aber was solls. Danke erstmal für die Hilfe.

Re: Filtern

Verfasst: Fr Dez 06, 2019 5:05 pm
von Athomas
Ah jetzt - ja! Eiine Insel!
Kann es sein, dass in Deinen Beispielsdaten nix passt?

Wenn man selbst eine Lösung findet, sollte man die auch hinschreiben - damit nachfolgende Generationen auch was davon haben!

Re: Filtern

Verfasst: Fr Dez 06, 2019 11:45 pm
von EDi
filter(Log2TPM,Log2TPM$Name==naba_ecm)
1. meinst du dplyr::filter? oder stats::filter? Sollte man explizit angeben, vorallem da dplyr unverschämterweise diesen Konflikt bewusst herbeiführt.
2. naba_ecm hat eine Länge >1, möchttest du %in% als Operator statdessen?
3. In deinem Beispiel passt nichts ?! Wozu soll das nütze sein?