In einem 'dataframe' bestimmte werte verändern

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

Moderatoren: EDi, jogo

Antworten
R_beginner
Beiträge: 12
Registriert: Mo Jun 15, 2020 10:42 am

In einem 'dataframe' bestimmte werte verändern

Beitrag von R_beginner »

Hallo Zusammen,
mein Datensatz hat folgende Struktur:

X <- (c(1:8))
seq <- c("A","B","A","B","A","B","A","B" )
set.seed(2020)
valueA <- rnorm(n=8,mean=5.5,sd=1.2)
valueB <- rnorm(n=8,mean=2,sd=0.6)
valueC <- rnorm(n=8,mean=1,sd=0.2)
daten <- data.frame(X, valueA, valueB, valueC, seq)

Ich würde jetzt gerne zwei dinge machen:
1.) Alle Werte aus "daten" mit seq = A sollen mit 2 multipliziert werden.
2.) Alle Werte aus "daten" der spalte valueC und mit seq = B sollen =0 sein.

Ich habe bis jetzt noch nicht den richtigen Ansatz gefunden.
Könnte das mit der Funktion mutate aus dem Packet dplyr funktionieren oder gibt es eine ganz einfache Variante solche Rechenoperationen durchzuführen?

Vielen Dank schon jetzt für eure Mühe
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: In einem 'dataframe' bestimmte werte verändern

Beitrag von bigben »

Ganz bestimmt kann man das auch mit dplyr machen. Ich mach mal einen von vielen möglichen Vorschlägen ohne dplyr. Ich führe dabei die Hilfsvariablen "reihen" und "spalten" ein, die einfach nur die Lesbarkeit verbessern sollen.

Code: Alles auswählen

# Alle Werte aus "daten" mit seq = A sollen mit 2 multipliziert werden.
reihen <- which(daten$seq == "A")
spalten <-c("valueA", "valueB", "valueC")
daten[reihen, spalten] <- 2 * daten[reihen, spalten]

# Alle Werte aus "daten" der spalte valueC und mit seq = B sollen =0 sein.
reihen <- which(daten$seq == "B")
daten[reihen, "valueC"] <- 0
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
R_beginner
Beiträge: 12
Registriert: Mo Jun 15, 2020 10:42 am

Re: In einem 'dataframe' bestimmte werte verändern

Beitrag von R_beginner »

bigben hat geschrieben: Fr Jul 03, 2020 4:39 pm Ganz bestimmt kann man das auch mit dplyr machen. Ich mach mal einen von vielen möglichen Vorschlägen ohne dplyr. Ich führe dabei die Hilfsvariablen "reihen" und "spalten" ein, die einfach nur die Lesbarkeit verbessern sollen.

Code: Alles auswählen

# Alle Werte aus "daten" mit seq = A sollen mit 2 multipliziert werden.
reihen <- which(daten$seq == "A")
spalten <-c("valueA", "valueB", "valueC")
daten[reihen, spalten] <- 2 * daten[reihen, spalten]

# Alle Werte aus "daten" der spalte valueC und mit seq = B sollen =0 sein.
reihen <- which(daten$seq == "B")
daten[reihen, "valueC"] <- 0
LG,
Bernhard

Hallo Bernhard,

vielen Dank für die schnelle Antwort! Hast mir sehr geholfen!
Antworten