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