Bedingte Formatierung
Bedingte Formatierung
Wie würdet ihr folgendes Problem lösen:
in einer Tabelle mit 10 Spalten sollen die Werte in Spalte 3 in NAs umgewandelt werden deren korrespondierender Wert in der selben Zeile in Spalte 4 unter 0,05 fällt. Und das gleiche noch mal für die Spalten 5 und 6 etc.
Ich bekomme die Bezüge nicht hin.
VG
Werner
in einer Tabelle mit 10 Spalten sollen die Werte in Spalte 3 in NAs umgewandelt werden deren korrespondierender Wert in der selben Zeile in Spalte 4 unter 0,05 fällt. Und das gleiche noch mal für die Spalten 5 und 6 etc.
Ich bekomme die Bezüge nicht hin.
VG
Werner
Re: Bedingte Formatierung
Hallo Werner,
nächstes Mal gerne wieder mit Beispieldaten fragen. Für dieses Mal:
LG,
Bernhard
nächstes Mal gerne wieder mit Beispieldaten fragen. Für dieses Mal:
Code: Alles auswählen
daten <- data.frame(a = (1:10)/100, b = letters[1:10])
print(daten)
index <- which(daten$a < .05)
daten$b[index] <- NA
print(daten)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Bedingte Formatierung
Das "which" ist meiner Meinung nach überflüssig...
Re: Bedingte Formatierung
Ja klar, das ist ebenso überflüssig wie das Einführen der index-Variablen, die nachher im Namespace und im Speicher rumliegt und nie wieder benutzt, aber auch nicht gelöscht wird. Ich habe das which in der Hoffnung drin, dass es den Code leichter verständlich macht. which ist ein englisches Wort ist und die Code-Zeile lässt sich so nahezu in einen englischen Satz übersetzen. Ob das aufgeht, ist eine andere Frage.
Dass mit der Ungleichung daten$a < .05 gleich ein ganzer Vector entsteht und dass man mit einem logischen Vector indizieren kann, das halte ich für eine Spezialität von R.
LG,
Bernhard
Dass mit der Ungleichung daten$a < .05 gleich ein ganzer Vector entsteht und dass man mit einem logischen Vector indizieren kann, das halte ich für eine Spezialität von R.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Bedingte Formatierung
Aber darum geht es hier doch !?Dass mit der Ungleichung daten$a < .05 gleich ein ganzer Vector entsteht und dass man mit einem logischen Vector indizieren kann, das halte ich für eine Spezialität von R.
Bei der Gelegenheit könnte man gleich zwei weitere "Spezialitäten" von R erwähnen: dass es keine Skalare gibt, und dass bei Operationen mit Vektoren das "Recycling" verwendet wird - wenn man sich dessen bewußt ist, ein Segen - andernfalls ein Fluch!
Code: Alles auswählen
1:10 > c(3,8)
Code: Alles auswählen
1:7 + 4:6 + 10:15
Re: Bedingte Formatierung
Hallo,
die Variante mit which funktioniert auf jeden Fall das ist schon mal klasse. Ich verwend gerne den pipe Operator um die Zusammengehörigkeit bei der Entstehung einer neuen Tabelle zu zeigen, außerdem denke ich immer noch sehr "Excel lastig", also in der Art: "Wenn in Zelle x die Bedingung erfüllt ist dann tue das in y". Ist die Denke eher hinderlich? Wie könnte man die Aufgabe in der Pipe lösen. Die Tabelle die es umzuformen gilt sieht in der Realität so aus:
Es gilt alle corrospondierende logFC Werte, deren adj_P values >0.05 sind auf NA zu setzen.
LG
wbart
die Variante mit which funktioniert auf jeden Fall das ist schon mal klasse. Ich verwend gerne den pipe Operator um die Zusammengehörigkeit bei der Entstehung einer neuen Tabelle zu zeigen, außerdem denke ich immer noch sehr "Excel lastig", also in der Art: "Wenn in Zelle x die Bedingung erfüllt ist dann tue das in y". Ist die Denke eher hinderlich? Wie könnte man die Aufgabe in der Pipe lösen. Die Tabelle die es umzuformen gilt sieht in der Realität so aus:
Code: Alles auswählen
dGE_all
# A tibble: 84 x 19
identifier geneSymbol geneName logFC_P adj_p_value_P logFC_HD_P3 adj_p_value_HD_~ logFC_HD_P4
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 ENSG00000~ KRT31 keratin~ 2.52 7.32e-31 0.186 0.927 -0.472
2 ENSG00000~ KRT85 keratin~ 2.44 1.95e-30 0.186 0.927 -0.472
3 ENSG00000~ KRT36 keratin~ 3.22 6.49e-21 0.186 0.927 -0.472
4 ENSG00000~ KRT86 keratin~ 1.48 6.11e-18 -2.14 0.257 -1.63
5 ENSG00000~ COL4A2 collage~ 2.87 4.58e-15 -0.0413 0.927 -0.436
6 ENSG00000~ KRT9 keratin~ 4.07 8.75e-14 0.186 0.927 -0.472
7 ENSG00000~ LAMB2 laminin~ 4.45 1.47e-13 0.214 0.782 -0.331
8 ENSG00000~ COL5A1 collage~ 2.79 2.16e-13 -0.236 0.489 -0.331
9 ENSG00000~ COL1A1 collage~ 2.12 4.92e-13 -0.641 0.0839 0.191
10 ENSG00000~ ELN elastin 4.62 2.58e-12 -0.606 0.370 -0.952
# ... with 74 more rows, and 11 more variables: adj_p_value_P_HD_P4 <dbl>, logFC_HDplus <dbl>,
# adj_p_value_P_HDplus <dbl>, logFC_C <dbl>, adj_p_value_C <dbl>, logFC_H_donor8 <dbl>,
# adj_p_value_H_donor8 <dbl>, logFC_H_donor10 <dbl>, adj_p_value_H_donor10 <dbl>,
# logFC_H_2donors <dbl>, adj_p_value_H_2donors <dbl>
>
LG
wbart
Re: Bedingte Formatierung
Ok, dann beginnen wir mit
Das kann schon mal etwas dauern. Geduld gehört zur Statistik dazu. Am besten startet man nicht so oft eine neue R Session, dann passiert das nicht so oft.
Damit wir in den vollen Genuss der Pipe kommen, importieren wir die noch.
und schon können wir anfangen zu coden, z. B.
Zugegeben, das ist ein verspäteter Aprilscherz. ifelse gehört gar nicht ins tidyverse und bestimmt hält das tidyverse dafür ein Verb bereit, das das gleiche tut, aber anders heißt.
LG,
Bernhard
Code: Alles auswählen
library(tidyverse)
Damit wir in den vollen Genuss der Pipe kommen, importieren wir die noch.
Code: Alles auswählen
library(magrittr)
Code: Alles auswählen
daten <- data.frame(a = (1:10)/100, b = letters[1:10])
daten %<>%
transmute(a, b = ifelse(a <.05, NA, b))
daten %>%
print()
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Bedingte Formatierung
Da ich von Zeit zu Zeit daran erinnere, dass es auch Leben außerhalb des Tidyverse gibt, hier noch eine data.table-Version:
Code: Alles auswählen
library(data.table)
dt <- data.table(a = (1:10)/100, b = letters[1:10])
dt[a < 0.05, b:=NA]
Ich sach immer: Excel denken und R machen wollen - dat gibt nix !außerdem denke ich immer noch sehr "Excel lastig", ... Ist die Denke eher hinderlich?
Re: Bedingte Formatierung
@Athomas: Ich weiß nicht. Erstens kommt da keine Pipe drin vor und zweitens ist library(data.table) langweilig. Man braucht länger, das zu tippen als der Rechner braucht, um es auszuführen. Wo bleibt denn da die Verhältnismäßigkeit? Wenn ich library(tidyverse) eintippe und danach geduldig warte, stellt sich doch ein ganz anderes Gefühl ein, bereits etwas vollbracht zu haben. Außerdem muss man ja auch an die Zukunft denken; wir werden alle nicht jünger. Unsere Gehirne nicht flotter. Mit dem tidyverse zahllose neue Verben zu lernen und auch immer wieder neu umzulernen ist ja irgendwie auch Gehirnjogging, und das soll vor Demenz schützen.
@wbart:
LG,
Bernhard
@wbart:
Umgekehrt: "R" (egal ob tidyverse, data.table oder base) denken und dabei vor Excel zu sitzen dürfte nochmal wesentlich deprimierender sein.außerdem denke ich immer noch sehr "Excel lastig", ... Ist die Denke eher hinderlich?
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte