Ich muss einige einfache Operationen auf wenige Vektoren und Zeilen durchführen.R: Operationen auf Vektoren mit verschiedenen Suffixen anwenden
sei angenommen, dass ich eine Datenbank haben, wie:
observation outcome_1_a outcome_2_a outcome_1_b outcome_2_b choice_a choice_b
1 41 34 56 19 1 1
2 32 78 43 6 2 1
3 39 19 18 55 1 2
für jede Beobachtung, outcome_1 und outcome_2 sind die zwei mögliche Ergebnisse, ist Wahl der gewählte Ausgang und das Präfix _i, mit i a, b =, gibt an, wie oft die Situation wiederholt wird.
Wenn ich will, Variablen erstellen die höchste Ergebnis für jede Situation Speicherung (a, b), also:
max.a <- pmax(data$outcome_1_a, data$outcome_2_a)
max.b <- pmax(data$outcome_1_b, data$outcome_2_b)
Und falls ich Variablen erstellt werden soll, die Werte in jeder Situation gewählt Speicherung kann ich tun:
choice.a <- ifelse(data$choice_a == "1", data$outcome_1_a, data$outcome_1_b)
choice.b <- ifelse(data$choice_b == "1", data$outcome_2_a, data$outcome_2_b)
Schließlich Wenn ich die mittlere Zeile der Situationen berechnen möchte a und b, kann ich tun:
library(data.table)
setDT(data)
data[, .(Mean = rowMeans(.SD)), by = observation, .SDcols = c("outcome_1_a","outcome_2_a", "outcome_1_b", "outcome_2_b")]
Nun, alle diese funktionieren gut. Ich habe mich jedoch gefragt, ob solche Operationen effizienter durchgeführt werden können.
Im Beispiel gibt es nur wenige sind Situationen, aber, wenn ich in Zukunft mit zu tun haben werde, sagen wir mal, 15 oder mehr unterschiedliche Situationen (a, b, c, d, ...,), das Schreiben solcher Operationen könnte ärgerlich sein.
Gibt es eine Möglichkeit, einen solchen Prozess basierend auf den verschiedenen Präfixen und/oder Suffixen der Variablen zu automatisieren?
Vielen Dank für Ihre Hilfe
Danke Eric. Ihr Code funktioniert hervorragend im 'RowMeans'-Fall. Aber (Entschuldigung, wenn ich etwas funktioniere), im Falle des Paares max by spalte den Prozess nicht automatisieren: das heißt, 'data schreiben [, do.call (pmax, .SD), .SDcols = Namen (Daten)% like% "\\ d + _a $"] 'gibt mir die gleiche Ausgabe wie' pmax (data $ outcome_1_a, data $ outcome_2_a) '. Ich muss den Brief immer noch manuell im 'SDcols' -Argument ändern –