Seite 1 von 1

Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 2:07 pm
von Werekorden
Hi,

ich habe folgenden Beispiel Code:

Code: Alles auswählen

df <- sample(0:32, 100, replace=TRUE)
df <- as_tibble(df)
df$pos <- ifelse(df$value >0 , 1, 0)
Gibt es einen besseren Weg neue Spalten mit Bedingungen hinzu zu fügen und vorallem wie kann man den code erweitern um von z.B. 5 Spalten die Daten zu nehmen um 5 neue Spalten zu generieren.

Es geht dasrum, dass ab einem bestimmten Wert die Probe als Positiv angesehen wird und unterhalb als negativ.

Wenn ich jetzt einen Patienten teste und 5 Pathogene, dann habe ich 5 Spalten mit Messergebnissen und ich will 5 neue Spalten die jedem Pathogen zugehörig angeben ob positiv oder negativ.


Hoffe es ist verständlich.

VG.

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 2:14 pm
von bigben
Hallo Andreas,
Werekorden hat geschrieben: Di Jun 06, 2023 2:07 pmdann habe ich 5 Spalten mit Messergebnissen und ich will 5 neue Spalten die jedem Pathogen zugehörig angeben ob positiv oder negativ.
Soll für alle fünf Spalten der gleiche Cutoff gelten oder für jede Spalte ein anderer?

LG,
Bernhard

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 2:17 pm
von Werekorden
Hallo Bernhard,


tja derzeit gilt noch der gleiche Cut-Off aber jenachdem was die Zellkultur sagt kann es sein, dass der Cut-off verschoben wird und zwar Spalten spezifisch, da jedes Pathogen unterschiedlich gut ist.


Sorry hatte ich vergessen zu erwähnen.

VG,
Andreas

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 2:22 pm
von bigben
Also bei gleichem Cutoff kann es so einfach sein:

Code: Alles auswählen

# Beispieldaten:
df <- sample(0:5, 100, 1) |> matrix(ncol = 5) |> as.data.frame()
head(df)
#>   V1 V2 V3 V4 V5
#> 1  0  2  3  4  1
#> 2  5  1  5  4  2
#> 3  3  4  3  2  2
#> 4  1  5  4  5  5
#> 5  1  0  0  4  0
#> 6  4  3  5  1  1

df.bool <- df > 0
head(df.bool)
#>         V1    V2    V3   V4    V5
#> [1,] FALSE  TRUE  TRUE TRUE  TRUE
#> [2,]  TRUE  TRUE  TRUE TRUE  TRUE
#> [3,]  TRUE  TRUE  TRUE TRUE  TRUE
#> [4,]  TRUE  TRUE  TRUE TRUE  TRUE
#> [5,]  TRUE FALSE FALSE TRUE FALSE
#> [6,]  TRUE  TRUE  TRUE TRUE  TRUE

und hier eine mögliche Variante für verschiedene Cutoffs für fünf verschiedene Spalten:

Code: Alles auswählen

df <- sample(0:10, 100, 1) |> matrix(ncol = 5) |> as.data.frame()
head(df)
#>   V1 V2 V3 V4 V5
#> 1 10  5  6  0  8
#> 2  2  3 10  7  2
#> 3  7  6  9  3  9
#> 4  1 10  2  3  2
#> 5  5  5  1  9  3
#> 6  1  8  5  0  4

cutoffs <- c(0, 1, 2, 5, 8, 7)

ergebnis <- lapply(1:5, \(spalte) df[,spalte] > cutoffs[spalte]) |> data.frame()
names(ergebnis) <- LETTERS[1:5]
head(cbind(df, ergebnis))
#>   V1 V2 V3 V4 V5    A    B     C     D     E
#> 1 10  5  6  0  8 TRUE TRUE  TRUE FALSE FALSE
#> 2  2  3 10  7  2 TRUE TRUE  TRUE  TRUE FALSE
#> 3  7  6  9  3  9 TRUE TRUE  TRUE FALSE  TRUE
#> 4  1 10  2  3  2 TRUE TRUE FALSE FALSE FALSE
#> 5  5  5  1  9  3 TRUE TRUE FALSE  TRUE FALSE
#> 6  1  8  5  0  4 TRUE TRUE  TRUE FALSE FALSE

LG,
Bernhard

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 2:34 pm
von Werekorden
Hi Bernhard,

ja aber ich will ja Extraspalten, die dann Werte 1 oder 0 haben für TRUE or FALSE bzw. pos./neg.

So kann jeder sehen welchen Wert Pathogen y bei Patient x hat und ob das bedeutet positiv oder negativ. Das ganze geht dann in einen Bericht ein der auch vergleicht zwischen vers. Technologien um Cohens Kappa auszugeben.

Deshalb ist eine Ausgabe als TRUE /FALSE nicht ideal.
__________ Pathogen_y _________Pahtogen_y_pos
Patient_x _____WERT_________________1

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 2:40 pm
von bigben
Das ist Ansichtssache. Du willst wissen, ob etwas größer oder kleiner ist als ein Grenzwert. Das ist mit TRUE und FALSE fast richtiger beschrieben als mit 1 und 0. Spielt aber keine Rolle, weil TRUE und FALSE in R ohnehin fast das gleiche sind wie 1 und 0. Du kannst ganz einfach mit as.numeric() umrechnen oder einfacher mit dem "* 1" Operator:

Code: Alles auswählen

> as.numeric(TRUE)
[1] 1
> as.numeric(FALSE)
[1] 0
> TRUE * 1
[1] 1
> FALSE * 1
[1] 0
eingebettet in eine tidyverse-Syntax könnte das dann so aussehen:

Code: Alles auswählen

library(tibble)
df <- sample(0:10, 100, 1) |> matrix(ncol = 5) |> as_tibble()


library(dplyr)
df %>% mutate(bool1 = 1 * (V1 > 0), bool2 = 1 * (V2 > 1), bool3 = 1 * (V3 > 5),
              bool4 = 1 * (V4 > 8), bool5 = 1 * (V5 > 7))
LG,
Bernhard

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Verfasst: Di Jun 06, 2023 5:45 pm
von Werekorden
Wow Bernhard,


wie immer großartige Hilfe. Danke vielmals.

Werde es mal ausprobieren.

VG,
Werek