Bedingte Formatierung

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Bedingte Formatierung

Beitrag von wbart »

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
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Bedingte Formatierung

Beitrag von bigben »

Hallo Werner,

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)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Bedingte Formatierung

Beitrag von Athomas »

Das "which" ist meiner Meinung nach überflüssig...
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Bedingte Formatierung

Beitrag von bigben »

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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Bedingte Formatierung

Beitrag von Athomas »

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.
Aber darum geht es hier doch :D !?
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
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Bedingte Formatierung

Beitrag von wbart »

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:

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>
> 
Es gilt alle corrospondierende logFC Werte, deren adj_P values >0.05 sind auf NA zu setzen.

LG
wbart
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Bedingte Formatierung

Beitrag von bigben »

Ok, dann beginnen wir mit

Code: Alles auswählen

library(tidyverse)
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.

Code: Alles auswählen

library(magrittr)
und schon können wir anfangen zu coden, z. B.

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()
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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Bedingte Formatierung

Beitrag von Athomas »

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]
außerdem denke ich immer noch sehr "Excel lastig", ... Ist die Denke eher hinderlich?
Ich sach immer: Excel denken und R machen wollen - dat gibt nix :lol: !
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Bedingte Formatierung

Beitrag von bigben »

@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. :lol:

@wbart:
außerdem denke ich immer noch sehr "Excel lastig", ... Ist die Denke eher hinderlich?
Umgekehrt: "R" (egal ob tidyverse, data.table oder base) denken und dabei vor Excel zu sitzen dürfte nochmal wesentlich deprimierender sein.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten