Identifizierung der Variablen mit dem höchsten Wert
Identifizierung der Variablen mit dem höchsten Wert
Liebes Forum,
ich bin aufgeschmissen mit folgender Rechenoperation:
Ich habe vier Variablen A, B, C, D. Jede stellt einen Mittelwert einer Skala dar, ist numerisch (bzw. integer). Ich muss nun die beiden Variablen mit dem höchsten und zweithöchsten Wert identifizieren und die Differenz bilden. Konkret benötige ich
1. eine neue Variable/Spalte, die aus den gegebenen Variablen diejenige mit dem höchsten Wert identifiziert, damit ich sie mit dem Label "A", "B", "C", "D" versehen kann,
2. eine neue Variable/Spalte, für die die Differenz "höchster Wert der vier Variablen" minus "zweithöchster Wert der Variablen" numerisch angegeben werden kann.
Es geht dann noch um einiges weiter, aber da komme ich mit which, ifelse etc. alleine klar.
Mir ist so ziemlich egal, ob ich das ganze in zwei Schritten oder in zehn mache, hauptsache, es geht überhaupt...
DANKE für eure Hilfe!
Karen
ich bin aufgeschmissen mit folgender Rechenoperation:
Ich habe vier Variablen A, B, C, D. Jede stellt einen Mittelwert einer Skala dar, ist numerisch (bzw. integer). Ich muss nun die beiden Variablen mit dem höchsten und zweithöchsten Wert identifizieren und die Differenz bilden. Konkret benötige ich
1. eine neue Variable/Spalte, die aus den gegebenen Variablen diejenige mit dem höchsten Wert identifiziert, damit ich sie mit dem Label "A", "B", "C", "D" versehen kann,
2. eine neue Variable/Spalte, für die die Differenz "höchster Wert der vier Variablen" minus "zweithöchster Wert der Variablen" numerisch angegeben werden kann.
Es geht dann noch um einiges weiter, aber da komme ich mit which, ifelse etc. alleine klar.
Mir ist so ziemlich egal, ob ich das ganze in zwei Schritten oder in zehn mache, hauptsache, es geht überhaupt...
DANKE für eure Hilfe!
Karen
Re: Identifizierung der Variablen mit dem höchsten Wert
Noch ein Nachtrag, bin neu und lese mich durchs Forum, den wertvollen Hinweis zu http://bbcodes.de/ würde ich gern weiter verfolgen, nur bekomme ich immer ein fettes forbidden angezeigt. Habt ihr noch andere links, wo ich mir anschauen kann, wie das mit den Codes funktioniert? Danke
Re: Identifizierung der Variablen mit dem höchsten Wert
Hallo Karen,
kennst Du die Funktionen max() und which.max()?
Hilft Dir im ersten Schritt das hier?
Wenn nicht, dann habe ich die Aufgabe wohl noch nicht verstanden und Du könntest sie vielleicht mit einem Beispiel neu beschreiben.
Teilaufgabe 2 habe ich nicht verstanden. Woher genau soll der zweihöchste Wert kommen?
Zu code-Tags könntest Du in diesen Beitrag hier auf "zitieren" klicken und Dir anschauen, wie ich das oben mit dem Code gemacht habe. Ansonsten kannst Du bbcodes in jede Suchmaschine Deiner Wahl eingeben und wirst etwas finden.
Sind das hier eigentlich Hausaufgaben?
LG,
Bernhard
Die Variablen A, B, C und D sind gegeben und Du willst sie jetzt irgendwie noch als A, B, C und D labeln?aus den gegebenen Variablen diejenige mit dem höchsten Wert identifiziert, damit ich sie mit dem Label "A", "B", "C", "D" versehen kann,
kennst Du die Funktionen max() und which.max()?
Hilft Dir im ersten Schritt das hier?
Code: Alles auswählen
A <- round(100*runif(10))
B <- round(100*runif(10))
C <- round(100*runif(10))
D <- round(100*runif(10))
which.max(c(max(A), max(B), max(C), max(D)))
c("A", "B", "C", "D")[which.max(c(max(A), max(B), max(C), max(D)))]
Teilaufgabe 2 habe ich nicht verstanden. Woher genau soll der zweihöchste Wert kommen?
Zu code-Tags könntest Du in diesen Beitrag hier auf "zitieren" klicken und Dir anschauen, wie ich das oben mit dem Code gemacht habe. Ansonsten kannst Du bbcodes in jede Suchmaschine Deiner Wahl eingeben und wirst etwas finden.
Sind das hier eigentlich Hausaufgaben?
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Identifizierung der Variablen mit dem höchsten Wert
Hallo Bernhard,
danke für Dein schnelle Antwort! Und nein, keine Hausaufgaben, Teil meiner Masterarbeit...
Max() und which.max() ist mir bisher nur im Zusammenhang von Häufigkeits-Abfragen begegnet, bin nicht sicher, ob das passt. Ich muss mich da erstmal reinfuchsen, auch in ein passendes Antwortformat. Auf jeden Fall erstmal danke! Ich komme morgen nochmal darauf zurück!
Vielleicht nochmal eine ausführlichere Beschreibung, auch zum zweiten Teil meiner Frage:
Ich habe ein Modell mit vier verschiedenen Unternehmenskulturen A, B, C, D (die Variablennamen sind komplexer). Die Auswertung und Zusammenfassung von Antworten eines Fragebogens ergibt die Mittelwerte für die Ausprägungen A bis D, das sind meine vier numerischen Variablen (alle zwischen 0 und 100, alle vier aufsummiert ergibt 100, ich habe da also sowas wie prozentuale Anteile). Jetzt geht es darum, die "dominante" Kultur (=mit dem höchsten Wert) zu identifizieren, also muss ich die Variable mit dem höchsten Wert der vier verschiedenen identifizieren. Für spätere Zwecke soll in einer zusätzlichen Variablen einfach nur das Label der entprechenden Variablen hinterlegt werden, damit ich Subgruppen für DominanzA, DominanzB, etc. bilden kann.
Die zweite Aktion ist dann die Stärke der Dominanz zu berechnen, ebenfalls in einer neuen Variable ausgegeben. Dafür muss ich die Differenz des Wertes der dominanten Kultur (höchster Wert der vier Variablen) und dem zweithöchsten Wert innerhalb der vier Variablen bilden.
Ich stelle mir vor, dass ich hier wie oben erstmal die Variable mit dem höchsten Wert, dann die mit dem zweithöchsten identifiziere und dann nur sage nimm den Wert x minus wert y.
LG
Karen
danke für Dein schnelle Antwort! Und nein, keine Hausaufgaben, Teil meiner Masterarbeit...
Max() und which.max() ist mir bisher nur im Zusammenhang von Häufigkeits-Abfragen begegnet, bin nicht sicher, ob das passt. Ich muss mich da erstmal reinfuchsen, auch in ein passendes Antwortformat. Auf jeden Fall erstmal danke! Ich komme morgen nochmal darauf zurück!
Vielleicht nochmal eine ausführlichere Beschreibung, auch zum zweiten Teil meiner Frage:
Ich habe ein Modell mit vier verschiedenen Unternehmenskulturen A, B, C, D (die Variablennamen sind komplexer). Die Auswertung und Zusammenfassung von Antworten eines Fragebogens ergibt die Mittelwerte für die Ausprägungen A bis D, das sind meine vier numerischen Variablen (alle zwischen 0 und 100, alle vier aufsummiert ergibt 100, ich habe da also sowas wie prozentuale Anteile). Jetzt geht es darum, die "dominante" Kultur (=mit dem höchsten Wert) zu identifizieren, also muss ich die Variable mit dem höchsten Wert der vier verschiedenen identifizieren. Für spätere Zwecke soll in einer zusätzlichen Variablen einfach nur das Label der entprechenden Variablen hinterlegt werden, damit ich Subgruppen für DominanzA, DominanzB, etc. bilden kann.
Die zweite Aktion ist dann die Stärke der Dominanz zu berechnen, ebenfalls in einer neuen Variable ausgegeben. Dafür muss ich die Differenz des Wertes der dominanten Kultur (höchster Wert der vier Variablen) und dem zweithöchsten Wert innerhalb der vier Variablen bilden.
Ich stelle mir vor, dass ich hier wie oben erstmal die Variable mit dem höchsten Wert, dann die mit dem zweithöchsten identifiziere und dann nur sage nimm den Wert x minus wert y.
LG
Karen
Re: Identifizierung der Variablen mit dem höchsten Wert
Ach so, Du willst das pro Reihe machen. Wie wäre es damit?
Wenn gleiche Werte in zwei Spalten stehen, wird hier A vor B vor C vor D ausgesucht, nicht deinem Beispiel folgend NA. Wäre das ein Problem?
LG,
Bernhard
Code: Alles auswählen
d <- data.frame( A = round(100*runif(10)),
B = round(100*runif(10)),
C = round(100*runif(10)),
D = round(100*runif(10)) )
d$dominant <- apply(d, 1, function(row)
c("A", "B", "C", "D")[which.max(row)])
print(d)
Man könnte auch sagen, dass Du die vier Werte jeder Reihe der größe nach sortierst und dann die Differenz zwischen erstem und zweitem ausrechnest.Die zweite Aktion ist dann die Stärke der Dominanz zu berechnen, ebenfalls in einer neuen Variable ausgegeben. Dafür muss ich die Differenz des Wertes der dominanten Kultur (höchster Wert der vier Variablen) und dem zweithöchsten Wert innerhalb der vier Variablen bilden.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Identifizierung der Variablen mit dem höchsten Wert
Hallo Bernhard,
großartig, der erste Schritt ist gemacht! Die Funktion habe ich noch vereinfacht, siehe screenshot in Zeile 38, der output ist prima.
Bei gleichen Werten ist die spätere Differenz null (sofern die zweite Identifizierung klappt), das ist als Indikator ausreichend, da noch Kategorien über den Differenzwert gebildet werden.
Somit habe ich jetzt die Variable mit dem höchsten Wert identifiziert. Wie komme ich aber an die zweithöchste und wie kann ich mir den Wert der entsprechenden Spalte anzeigen lassen?
Eine Differenz berechnen schaff ich dann wieder...
LG
Karen
großartig, der erste Schritt ist gemacht! Die Funktion habe ich noch vereinfacht, siehe screenshot in Zeile 38, der output ist prima.
Bei gleichen Werten ist die spätere Differenz null (sofern die zweite Identifizierung klappt), das ist als Indikator ausreichend, da noch Kategorien über den Differenzwert gebildet werden.
Somit habe ich jetzt die Variable mit dem höchsten Wert identifiziert. Wie komme ich aber an die zweithöchste und wie kann ich mir den Wert der entsprechenden Spalte anzeigen lassen?
Hört sich einfach an, aber ich hänge total...Man könnte auch sagen, dass Du die vier Werte jeder Reihe der größe nach sortierst und dann die Differenz zwischen erstem und zweitem ausrechnest.
Eine Differenz berechnen schaff ich dann wieder...
LG
Karen
Re: Identifizierung der Variablen mit dem höchsten Wert
Ich habe gerade keine Zeit. Hilft das hier?
Sonst melde ich mich später nochmal.
LG,
Bernhard
Code: Alles auswählen
> sort(c(4, 3, 1, 2))
[1] 1 2 3 4
> sort(c(4, 3, 1, 2))[3]
[1] 3
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Identifizierung der Variablen mit dem höchsten Wert
Hallo Bernhard,
nein, funktioniert leider nicht, sortiert die Daten alle in einer Reihe. Und gibt seltsamerweise auch mehr als 199 (Fälle) x 4 (Variablen) aus, nämlich 811.
In der R-Hilfe zu sort stand, für das Sortieren innerhalb von dataframes sollte man order verwenden. Da hab ich mal etwas rumgestochert, aber da kommt nur Schwachsinn raus (shit in, shit out ist natürlcih auch möglich...) und eben auch eine Listenabfolge von nunmehr weit über tausend Werten
Ich habe in englischsprachigen Foren genau zu meiner Fragestellung (Sortieren einer Reihe von vier Variablen) diese beiden Varianten gefunden, denen ich aber auch planlos gegenüberstehe:
wobei die zweite Variante Buchstaben alphabetisch sortiert hat.
Kannst Du mir weiterhelfen?
DANKE!
Karen
nein, funktioniert leider nicht, sortiert die Daten alle in einer Reihe. Und gibt seltsamerweise auch mehr als 199 (Fälle) x 4 (Variablen) aus, nämlich 811.
In der R-Hilfe zu sort stand, für das Sortieren innerhalb von dataframes sollte man order verwenden. Da hab ich mal etwas rumgestochert, aber da kommt nur Schwachsinn raus (shit in, shit out ist natürlcih auch möglich...) und eben auch eine Listenabfolge von nunmehr weit über tausend Werten
Code: Alles auswählen
> order(data.frame(Skala.OCAIA,Skala.OCAIB,Skala.OCAIC,Skala.OCAID),
+ na.last = TRUE, decreasing = FALSE, method = c("auto"))
[1] 260 628 68 416 330 437 302 698 51 670 617 649 1423 639 404 417 1 498 717 79
[21] 447 324 7 375 9 474 1101 523 3 436 595 227 641 661 464 135 349 370 371 519
[41] 1006 701 155 106 692 118 427 491 711 564 1113 461 668 674 281 710 419 652 123 362
Code: Alles auswählen
# if you wish to sort in decreasing order, defining a function
mysort <- function(x){sort(x, decreasing = TRUE)}
# does the trick:
t(apply(d, 1, FUN = function(x) mysort(x)))
oder
# This is really straight-forward and easy to solve with a simple loop.
s <- x
for(i in 1:NROW(x)) {
+ s[i,] <- sort(s[i,])
+ }
Kannst Du mir weiterhelfen?
DANKE!
Karen
Re: Identifizierung der Variablen mit dem höchsten Wert
So wie Du uns hättest sagen sollen, dass diese Regeln pro Zeile angewandt werden sollen, so musst Du das auch R sagen. In meinem Beispiel oben habe ich das mit apply gemacht. Kennst Du apply? Sonst kann man das auch in einer for-Schleife Reihe für Reihe machen.
Ich denke das hier zeit ganz schön, wie man das mit apply macht und ich denke, das kommt schon recht nah an das, was Du machen willst:
LG,
Bernhard
Ich denke das hier zeit ganz schön, wie man das mit apply macht und ich denke, das kommt schon recht nah an das, was Du machen willst:
Code: Alles auswählen
d <- data.frame( A = round(20*runif(10)),
B = round(20*runif(10)),
C = round(20*runif(10)),
D = round(20*runif(10)) )
d$dominant <- apply(d[,c("A", "B", "C", "D")], 1, function(row)
c("A", "B", "C", "D")[which.max(row)])
# Funktionsdefinition: wie sollen die Differenzen pro Reihe gebildet werden
differenz <- function(reihe){
s <- sort(reihe)
d <- s[4] - s[3]
if(d!=0) return(d)
else return(NaN)
}
# Funktionsanwendung auf jede Reihe
d$differenz <- apply(d[,c("A", "B", "C", "D")], 1, differenz)
# dominant löschen, wo keine Differenz ist
d$dominant <- ifelse(is.nan(d$differenz), yes = NaN, no = d$dominant)
print(d)
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte