Identifizierung der Variablen mit dem höchsten Wert

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

Moderatoren: EDi, jogo

NeugierundOrga

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von NeugierundOrga »

Hallo Bernhard,

Jackpot! Puhhh, ich dank Dir sehr, dass mein Leiden ein Ende hat und ich endlich in Regressionen & co einsteigen kann.
Und sorry, scheinbar hatte ich nicht ganz klar rübergebracht, wie die Daten aussehen und was ich damit machen will.

Mit ein paar Änderungen sieht es jetzt so aus:

Code: Alles auswählen

d <- data.frame(Skala.OCAIA,Skala.OCAIB,Skala.OCAIC,Skala.OCAID)

d$dominant <- apply(d[,c("Skala.OCAIA","Skala.OCAIB","Skala.OCAIC","Skala.OCAID")], 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]
 }

# Funktionsanwendung auf jede Reihe
d$differenz <- apply(d[,c("Skala.OCAIA","Skala.OCAIB","Skala.OCAIC","Skala.OCAID")], 1, differenz)

# dominant löschen, wo keine Differenz ist
d$dominant <- ifelse(is.nan(d$differenz), yes = NaN, no = d$dominant)

print(d)

Code: Alles auswählen

 Skala.OCAIA Skala.OCAIB Skala.OCAIC Skala.OCAID dominant  differenz
1      7.777778   25.833333   53.611111   12.777778        C 27.7777778
2     17.500000   10.833333   28.611111   43.055556        D 14.4444444
3     10.000000   10.833333   53.055556   26.111111        C 26.9444444
4            NA          NA          NA          NA                  NA
5     24.166667   30.000000   22.222222   23.611111        B  5.8333333
6     22.777778   23.333333   30.000000   23.888889        C  6.1111111

42    25.277778   17.500000   28.611111   28.611111        C  0.0000000
Siehe Zeile 42, das mit dem "dominant" löschen funktioniert nicht, aber das ist egal. Ich bilde nachfolgend noch Kategorien und alles was kleinere Werte als 5 hat, wird nicht als dominant im Sinne meines Modells behandelt.

Die Funktion für die Differenz hatte ich gekürzt, nachdem ich eine Fehlermeldung bekam:

Code: Alles auswählen

 
> differenz <- function(reihe){
+   s <- sort(reihe)
+   d <- s[4] - s[3]
+   if(d!=0) return(d)
+   else return(NaN)
+ }

> d$differenz <- apply(d[,c("Skala.OCAIA","Skala.OCAIB","Skala.OCAIC","Skala.OCAID")], 1, differenz)
Error in if (d != 0) return(d) else return(NaN) : 
  missing value where TRUE/FALSE needed
  
> differenz <- function(reihe){
+   s <- sort(reihe)
+   d <- s[4] - s[3]
+  }

> d$differenz <- apply(d[,c("Skala.OCAIA","Skala.OCAIB","Skala.OCAIC","Skala.OCAID")], 1, differenz)
> View(d) 

Ich sehe nicht wirklich, dass ich dadurch einen Fehler habe. Falls ich was ganz blödes veranstaltet habe, mach mich bitte gern drauf aufmerksam. Die Ausgabe aus dem workspace zeigt keine leeren Felder so wie die Ausgabe oben (siehe Anhang), evtl. liegt es daran? Oder das ist immer so und ich weiß das bloß nicht. Wollte es nur ergänzen, falls das für Dich von Interesse ist.
ScreenHunter_337 Aug. 29 22.11.jpg
Also, ein gaaaaanz großes DANKESCHÖN!!!!!
Du hast mich erlöst. :)
Karen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von jogo »

Hallo Karen,

zeigt denn

Code: Alles auswählen

summary(d[,c("Skala.OCAIA","Skala.OCAIB","Skala.OCAIC","Skala.OCAID"))
das Vorhandensein von NAs an?
... (zwei Minuten später)
Das war eine sinnlose Frage, denn Du zeigst ja einen Teil der Daten - und dort sieht man die NAs. Was möchtest Du mit solchen Werten machen, wenn die Datenzeile der Funktion übergeben wird?
Wenn Du die Daten vorher reduzieren möchtest um die NAs, könnte das eventuell so aussehen:

Code: Alles auswählen

d <- na.omit(d)
d$differenz <- apply(d[,c("Skala.OCAIA","Skala.OCAIB","Skala.OCAIC","Skala.OCAID")], 1, differenz)
Gruß, Jörg
NeugierundOrga

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von NeugierundOrga »

Hallo Jörg,

danke für Deine zusätzliche Idee. Für die spätere Auswertung werde ich auf jeden Fall dataframes ohne die NAs bilden. Aber ich wollte erstmal über alles die neuen Variablen/Vektoren "anbauen".
Was möchtest Du mit solchen Werten machen, wenn die Datenzeile der Funktion übergeben wird?
Ich bin nicht sicher, ob ich Deine Frage vertehe. Im Gesamten wird das so aussehen:
Ich habe drei Gruppen, die ich auswerte, bedingt durch eine recht zeitaufwändige Erhebung und viele Abbrüche.
- Abfragen zur individuellen Neugier. Hier berechne ich erst Skalenwerte, unvollständige Antworten werden über rowmeans zu NAs und fleigen raus. Korrelationen der drei Neugierskalen, Crohnbachs alpha etc.
- Für die weiteren Abfragen sind erheblich weniger Daten vorhanden, daher werde ich hier einen separaten dataframe bemühen. Es geht um wahrgenommene Unternehmesnkultur: Skalenwerte (A,B,C,D) berechnen, "dominante" Kultur identifizieren, Stärke der Dominanz (Differenz höchster Wert minus zweithöchster Wert) berechnen, Kategorien aus den Differenzwerten bilden (neutral, dominant, sehr dominant). Hier stehe ich gerade. Ohne NAs dann Korrelationen der verschiedenen Kulturen und Stärken mit den Neugierwerten.
- und dann, weil noch weniger vollständige Daten in einem weiteren dataframe die erwünschte Kultur, die individuelle Passung zur wahrgenommenen Kultur und die Zusammenhänge zur Neugier: Erneut vier Kulturdimensionen (separate Vektoren) Ae, Be, Ce, De als Skalenwerte berechnen, für alle in der vorherigen Runde als dominant identifizierten den entsprechenden Gegenpart suchen (neuen Vektor erstellen) und die Differenz berechnen (ebenfalls neuer Vektor; also wenn vorher dominant=D, dann jetzt D - De, wenn dominant=C, dann C - Ce). Und wieder über die Differenz Kategorien bilden, Korrelationen mit der Neugier.

:lol: Wolltest Du es so ausführlich?
Jedenfalls gehe ich davon aus, dass ich alle NAs für die Auswertungen sowieso aus den dann gebildten dataframes rauslassen kann und sie mich somit nicht stören.

Dabei fällt mir jetzt auf, dass ich vielleicht doch noch mal Hilfe bräuchte... :shock:
Wie drücke ich Folgendes über eine Funktion aus?
- zeilenweise ausgeführt:
wenn (dominant) = A, dann berechne (A) minus (Ae),
wenn (dominant) = B, dann berechne (B) minus (Be),
wenn (dominant) = C, dann berechne (C) minus (Ce),
wenn (dominant) = D, dann berechne (D) minus (De),
NA=NA

Ich dachte, ich bekomme das selbst hin, aber...puh!

Danke für jede weitere Hilfe! :)
Karen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von jogo »

Hallo Karen,
NeugierundOrga hat geschrieben: Fr Aug 31, 2018 10:16 am Dabei fällt mir jetzt auf, dass ich vielleicht doch noch mal Hilfe bräuchte... :shock:
Wie drücke ich Folgendes über eine Funktion aus?
- zeilenweise ausgeführt:
wenn (dominant) = A, dann berechne (A) minus (Ae),
wenn (dominant) = B, dann berechne (B) minus (Be),
wenn (dominant) = C, dann berechne (C) minus (Ce),
wenn (dominant) = D, dann berechne (D) minus (De),
NA=NA

Ich dachte, ich bekomme das selbst hin, aber...puh!
als Pseudocode sieht das doch schon prima aus.
Eine konkrete Umsetzung in R-Code kann es nur anhand konkreter Daten geben, bitte lies: viewtopic.php?f=20&t=11
Also etwa so:

Code: Alles auswählen

set.seed(42)
d <- as.data.frame(matrix(rnorm(32), 4, 8))
names(d) <- c("A", "B", "C", "D", "Ae", "Be", "Ce", "De")

d$dominant <- apply(d[, 1:4], 1, which.max)

diffXvsXe <- function(x) x[x[9]] - x[x[9]+4]

d$XminusXe <- apply(d, 1, diffXvsXe)
oder so:

Code: Alles auswählen

set.seed(42)
d <- as.data.frame(matrix(rnorm(32), 4, 8))
names(d) <- c("A", "B", "C", "D", "Ae", "Be", "Ce", "De")

dominant <- names(d)[apply(d[, 1:4], 1, which.max)]

d$XminusXe <- NA
for (i in 1:nrow(d)) d$XminusXe[i] <- d[i, which(dominant[i]==names(d))] - d[i, which(paste0(dominant[i],"e")==names(d))]
Gruß, Jörg
NeugierundOrga

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von NeugierundOrga »

Hallo Jörg und Bernhard,

ich habe mit einem vorher über einige Kriterien bereinigten Datensatz alles nochmal durchgespielt und bleibe jetzt an einem früheren Schritt hängen, vielleicht ist mir das auch im vorherigen Test nicht aufgefallen. Es geht um eine nicht funktionierende Umsetzung von character zu faktor (oder numeric, das ist mir egal).

Dies sind meine Daten:

Code: Alles auswählen

Auswahl.OCAI <- data.frame(Tabelle.OCAI$OCAIA,Tabelle.OCAI$OCAIB,Tabelle.OCAI$OCAIC,Tabelle.OCAI$OCAID)

print(Auswahl.OCAI)
   Tabelle.OCAI.OCAIA Tabelle.OCAI.OCAIB Tabelle.OCAI.OCAIC Tabelle.OCAI.OCAID
1             7.777778          25.833333          53.611111          12.777778
2            17.500000          10.833333          28.611111          43.055556
3            10.000000          10.833333          53.055556          26.111111
4            24.166667          30.000000          22.222222          23.611111
5            22.777778          23.333333          30.000000          23.888889
6             8.611111           8.611111          55.833333          26.944444

str(Auswahl.OCAI)
'data.frame':	191 obs. of  4 variables:
 $ Tabelle.OCAI.OCAIA: num  7.78 17.5 10 24.17 22.78 ...
 $ Tabelle.OCAI.OCAIB: num  25.8 10.8 10.8 30 23.3 ...
 $ Tabelle.OCAI.OCAIC: num  53.6 28.6 53.1 22.2 30 ...
 $ Tabelle.OCAI.OCAID: num  12.8 43.1 26.1 23.6 23.9 ...
So weit, so gut.

Code: Alles auswählen

# Identifizieren der dominanten Kultur (höchster Wert der vier Variablen je Zeile) und Zufügen des neuen Vektors domCul

Auswahl.OCAI$domCul <- apply(Auswahl.OCAI[,c("Tabelle.OCAI.OCAIA","Tabelle.OCAI.OCAIB","Tabelle.OCAI.OCAIC","Tabelle.OCAI.OCAID")], 1, function(row)
  c("A", "B", "C", "D")[which.max(row)])
  
print(Auswahl.OCAI)
Tabelle.OCAI.OCAIA Tabelle.OCAI.OCAIB Tabelle.OCAI.OCAIC Tabelle.OCAI.OCAID domCul
1             7.777778          25.833333          53.611111          12.777778      C
2            17.500000          10.833333          28.611111          43.055556      D
3            10.000000          10.833333          53.055556          26.111111      C
4            24.166667          30.000000          22.222222          23.611111      B
5            22.777778          23.333333          30.000000          23.888889      C
6             8.611111           8.611111          55.833333          26.944444      C

str(Auswahl.OCAI)
'data.frame':	191 obs. of  5 variables:
 $ Tabelle.OCAI.OCAIA: num  7.78 17.5 10 24.17 22.78 ...
 $ Tabelle.OCAI.OCAIB: num  25.8 10.8 10.8 30 23.3 ...
 $ Tabelle.OCAI.OCAIC: num  53.6 28.6 53.1 22.2 30 ...
 $ Tabelle.OCAI.OCAID: num  12.8 43.1 26.1 23.6 23.9 ...
 $ domCul            : chr  "C" "D" "C" "B" ... 

table(Auswahl.OCAI$domCul)
 A  B  C  D 
40  9 77 65
Hier fängt jetzt das Problem an, da "domCul"als character ausgegeben wird.
Ich wollte wie gewohnt in einen Faktor umwandeln, was erst auch so aussah, als ob es fein wäre, es dann aber doch nicht war:

Code: Alles auswählen

# Variable als Faktor anlegen
Auswahl.OCAI$domCul.faktor <- factor(Auswahl.OCAI$domCul,
                                     levels = c(1,2,3,4),
                                             labels = c("Familie","Adhocratie","Markt","Hierarchie"))

class(Auswahl.OCAI$domCul.faktor)
[1] "factor"

print(Auswahl.OCAI$domCul.faktor)
[1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 ...
[190] <NA> <NA>
Levels: Familie Adhocratie Markt Hierarchie 
Auch ein Umwandeln in von character in numeric funktioniert nicht:

Code: Alles auswählen

Auswahl.OCAI$domCul <- as.numeric(as.character(Auswahl.OCAI$domCul))

class(Auswahl.OCAI$domCul)
[1] "numeric"

print(Auswahl.OCAI$domCul)
  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 ...
[176] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
Was mache ich denn hier falsch?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von jogo »

Hallo Karen,
NeugierundOrga hat geschrieben: Mo Sep 03, 2018 11:37 pm Was mache ich denn hier falsch?
schau mal hier:

Code: Alles auswählen

domCul  <- c("C", "D", "C", "B", "A")
factor(domCul, levels = c(1,2,3,4), labels = c("Familie","Adhocratie","Markt","Hierarchie"))            ### :-(
factor(domCul, levels = c("A", "B", "C", "D"), labels = c("Familie","Adhocratie","Markt","Hierarchie")) ### :-)
Gruß, Jörg
NeugierundOrga

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von NeugierundOrga »

Hallo Jörg,

danke, dass Du den Wald sortiert hast und ich die Bäume wieder sehe!
schau mal hier:

Code: Alles auswählen

domCul  <- c("C", "D", "C", "B", "A")
factor(domCul, levels = c(1,2,3,4), labels = c("Familie","Adhocratie","Markt","Hierarchie"))            ### :-(
factor(domCul, levels = c("A", "B", "C", "D"), labels = c("Familie","Adhocratie","Markt","Hierarchie")) ### :-)
Das war natürlich etwas blind..
Aber so bin ich jetzt wieder bei meiner eigentlichen Frage angekommen. Habe alles etwas besser durchsortiert. Dies hier sind meine Daten:

Code: Alles auswählen

print(Auswahl.idOCAI)
    u_domCul   u_domCul.faktor    u_domCulstr       u_idOCAIA      u_idOCAIB      u_idOCAIC      u_idOCAID
1          C             Markt               27.7777778       26.944444       28.333333        24.72222        20.00000
2          D        Hierarchie             14.4444444       24.722222       24.722222        31.33333        19.22222
3          B        Adhocratie              5.8333333       23.888889       36.111111        22.22222        17.77778
4          C             Markt                6.1111111        27.777778      25.000000        22.77778        24.44444
5          C             Markt               28.8888889       31.388889      23.888889        20.27778        24.44444
6          C             Markt                 0.5555556       31.388889       25.000000       14.44444        29.16667

 str(Auswahl.idOCAI)
'data.frame':	128 obs. of  7 variables:
 $ u_domCul       : Factor w/ 4 levels "A","B","C","D": 3 4 2 3 3 3 3 3 4 4 ...
 $ u_domCul.faktor: Factor w/ 4 levels "Familie","Adhocratie",..: 3 4 2 3 3 3 3 3 4 4 ...
 $ u_domCulstr    : num  27.78 14.44 5.83 6.11 28.89 ...
 $ u_idOCAIA      : num  26.9 24.7 23.9 27.8 31.4 ...
 $ u_idOCAIB      : num  28.3 24.7 36.1 25 23.9 ...
 $ u_idOCAIC      : num  24.7 31.3 22.2 22.8 20.3 ...
 $ u_idOCAID      : num  20 19.2 17.8 24.4 24.4 ... 
Damit möchte ich jetzt zeilenweise die neue numerische Variable "POfitstr" berechnen. So sollen die Bedingungen sein:

# wenn (u_domCul.faktor) = "Familie", dann berechne (u_idOCAIA) minus (u_domCulstr),
# wenn (u_domCul.faktor) = "Adhocratie", dann berechne (u_idOCAIB) minus (u_domCulstr),
# wenn (u_domCul.faktor) = "Markt", dann berechne (u_idOCAIC) minus (u_domCulstr),
# wenn (u_domCul.faktor) = "Hierarchie", dann berechne (u_idOCAID) minus (u_domCulstr),

Oder muss ich statt der label die hinterlegten Zahlen verwenden? Dann ist Familie=1, Adhocratie=2, Markt=3 und Hierarchie=4.
Auf NAs muss nicht geachtet werden, es liegen ausschließlich Zahlenwerte (bzw. in u_domCul.faktor auch Faktoren) vor.

Kannst Du mir dabei nochmal helfen? das wäre großartig! :-)

Mir ist übrigens aufgefallen, dass die Variable "domCul" ursprünglich die Form Character hatte, das war der Grund für die Umwandlung in domCul.faktor heute morgen. Nun ist in der Tabelle oben "domCul" (nach einiger Tabellesortiererei jetzt umbenannt in "u_domCul") auf einmal ein Faktor. (???) Daher wäre mein Vorschlag für die Rechenoperation "u_domCul.faktor".

Ganz herzlichen Dank!!
Karen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von jogo »

Hallo Karen,

hier ein erster Ansatz:
genutzt wird die Indizierung mit einem logischen Vektor. Beim Vergleich eines Faktors mit einem character wird der Faktor zu einem character umgewandelt.

Code: Alles auswählen

d$POfitstr <- NA
i <- d$u_domCul.faktor == "Familie";    d$POfitstr[i] <- d$u_idOCAIA[i] - d$u_domCulstr[i]
i <- d$u_domCul.faktor == "Adhocratie"; d$POfitstr[i] <- d$u_idOCAIB[i] - d$u_domCulstr[i]
i <- d$u_domCul.faktor == "Markt";      d$POfitstr[i] <- d$u_idOCAIC[i] - d$u_domCulstr[i]
i <- d$u_domCul.faktor == "Hierarchie"; d$POfitstr[i] <- d$u_idOCAID[i] - d$u_domCulstr[i]
Wie man sofort sieht, ist das noch nicht optimal ...

Deshalb hier schnell Variante 2:

Code: Alles auswählen

d$POfitstr <- NA
i <- d$u_domCul.faktor == "Familie";    d$POfitstr[i] <- d$u_idOCAIA[i]
i <- d$u_domCul.faktor == "Adhocratie"; d$POfitstr[i] <- d$u_idOCAIB[i]
i <- d$u_domCul.faktor == "Markt";      d$POfitstr[i] <- d$u_idOCAIC[i]
i <- d$u_domCul.faktor == "Hierarchie"; d$POfitstr[i] <- d$u_idOCAID[i]
d$POfitstr <- d$POfitstr - d$u_domCulstr
Es sieht so aus, als ob man with() oder within() nutzbringend einsetzen könnte ...
with() ist sicherer (aber auch etwas unbequemer); also Variante 3:

Code: Alles auswählen

Dataframe$POfitstr <- NA
Dataframe$POfitstr <- with(Dataframe, {
  i <- u_domCul.faktor == "Familie";    POfitstr[i] <- u_idOCAIA[i]
  i <- u_domCul.faktor == "Adhocratie"; POfitstr[i] <- u_idOCAIB[i]
  i <- u_domCul.faktor == "Markt";      POfitstr[i] <- u_idOCAIC[i]
  i <- u_domCul.faktor == "Hierarchie"; POfitstr[i] <- u_idOCAID[i]
  POfitstr - u_domCulstr
})
So, jetzt bin ich zufrieden mit dem Code - Du musst nur noch an drei Stellen den Namen für den Dataframe anpassen.

Zu dem anderen Problem:
Mir ist übrigens aufgefallen, dass die Variable "domCul" ursprünglich die Form Character hatte, das war der Grund für die Umwandlung in domCul.faktor heute morgen. Nun ist in der Tabelle oben "domCul" (nach einiger Tabellesortiererei jetzt umbenannt in "u_domCul") auf einmal ein Faktor. (???) Daher wäre mein Vorschlag für die Rechenoperation "u_domCul.faktor".
Das kommt üblicherweise bei der Konstruktion eines Dataframes, denn die Funktionen data.frame() und as.data.frame() (auch read.~()) haben als Parameter stringsAsFactors=TRUE.

Gruß, Jörg
NeugierundOrga

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von NeugierundOrga »

Hallo Jörg,

die Variante 3 hat reibungslos funktioniert.
Himmel, was bin ich froh!
Und dankbar für dieses Form!
Und Dir und Bernhard!!! :D

Jetzt bin ich mit der Datenbereinigung, -sortierung und -ergänzung durch und kann mich endlich um die statistischen Fragestellungen kümmern.

Außerdem habe ich viel gelernt, z.B. dies
Mir ist übrigens aufgefallen, dass die Variable "domCul" ursprünglich die Form Character hatte, das war der Grund für die Umwandlung in domCul.faktor heute morgen. Nun ist in der Tabelle oben "domCul" (nach einiger Tabellesortiererei jetzt umbenannt in "u_domCul") auf einmal ein Faktor.
Das kommt üblicherweise bei der Konstruktion eines Dataframes, denn die Funktionen data.frame() und as.data.frame() (auch read.~()) haben als Parameter stringsAsFactors=TRUE.
Nochmal herzlichen Dank und sehr erleichterte Grüße!
Karen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Identifizierung der Variablen mit dem höchsten Wert

Beitrag von jogo »

Hallo Karen,
NeugierundOrga hat geschrieben: Di Sep 04, 2018 9:22 pm die Variante 3 hat reibungslos funktioniert.
ich habe ja auch alles getestet anhand des iris-Datensatzes.
Himmel, was bin ich froh!
Und dankbar für dieses Form!
Und Dir und Bernhard!!! :D
schön, dass es geholfen hat.

Außerdem habe ich viel gelernt, z.B. dies
Mir ist übrigens aufgefallen, dass ...
Das kommt üblicherweise bei der Konstruktion eines Dataframes, denn die Funktionen data.frame() und as.data.frame() (auch read.~()) haben als Parameter stringsAsFactors=TRUE.
Auch ich habe wieder viel gelernt. :o
Mein erster Gedanke war switch(), aber es zeigte sich, dass switch() nicht vektorisiert arbeitet
(ifelse() hatte ich schon vorher ausgeschlossen, da ich keine Lust auf eine Dreifachverschachtelung hatte - und lesen möchte sowas auch keiner).
Dann kamen erstmal die ersten beiden Varianten.
Über with(), within() und transform() habe ich auch einiges gelernt. Hier das Beispiel, wegen dessen ich meine, dass within() etwas gefährlicher ist:

Code: Alles auswählen

X <- iris
X <- within(X, { neu <- NA
  i <- Species=="setosa";     neu[i] <- 11
  i <- Species=="versicolor"; neu[i] <-202
  rm(i)   ## besser ist es, i wieder zu löschen
})
Das ist aber immer noch 1000-mal besser als der Einsatz der Funktion, die hier im Forum nicht genannt werden darf.

transform() dürfte ein wrapper für within() sein - etwas weniger kraftvoll, dafür aber sicherer.

Grüße, Jörg
Antworten