Mehrere Spalten mit ifelse Bedingung erstellen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Mehrere Spalten mit ifelse Bedingung erstellen

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

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Mehrere Spalten mit ifelse Bedingung erstellen

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

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Mehrere Spalten mit ifelse Bedingung erstellen

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

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Mehrere Spalten mit ifelse Bedingung erstellen

Beitrag von Werekorden »

Wow Bernhard,


wie immer großartige Hilfe. Danke vielmals.

Werde es mal ausprobieren.

VG,
Werek
Antworten