Fehler if in for-Schleife

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

Moderatoren: EDi, jogo

Antworten
Zabel
Beiträge: 13
Registriert: Mo Okt 28, 2019 11:41 am

Fehler if in for-Schleife

Beitrag von Zabel »

Hey Forum,

ich bin noch blutiger Anfänger und versuche mich gerade in R. Ich möchte eine Zeile eines Datensatzes, wenn die Bedingung =20 erfüllt ist,
in einen neuen df "übertragen" und habe folgendes versucht:

Code: Alles auswählen

for (i in 1:length(data_all$`Performance Fee`)){
   if(data_all$`Performance Fee`[i]==20){
     fee20[,i]<-data_all$`Performance Fee`[,i]
   }
   else{
     ["soll nichts passieren"]
   }
 }
Ich erhalte die Fehlermeldung

Fehler in if (data_all$`Performance Fee` == 20) { :
Fehlender Wert, wo TRUE/FALSE nötig ist

Ich weiß nicht mehr weiter und hoffe jemand kann mir Alternativen aufzeigen. Vielen Dank im voraus!
LG Zabel
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehler if in for-Schleife

Beitrag von bigben »

Hallo Zabel,

in Spaltennamen gehören eigentlich keine Leerzeichen und es kann sein, dass R aus Deinem `Performance Fee` in irgendeinem früheren Schritt mal ein Performance.Fee gemacht hat.

Was sagt denn

Code: Alles auswählen

str(data_all)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Zabel
Beiträge: 13
Registriert: Mo Okt 28, 2019 11:41 am

Re: Fehler if in for-Schleife

Beitrag von Zabel »

Hey Bernhard,

danke für die schnelle Hilfe

str sagt folgendes:

str(data_all)
tibble [980 x 8] (S3: tbl_df/tbl/data.frame)
$ SecId : chr [1:980] "FOUSA06MUZ" "FOUSA06HYO" "FHUSA04GHB" "F00000IS0P" ...
$ Management Fee : chr [1:980] "1.5000" "1.5000" "1.5000" "2.000" ...
$ Max Management Fee : chr [1:980] "1.5000" NA NA NA ...
$ Performance Fee : num [1:980] 20 20 20 20 20 20 20 10 10 20 ...
$ Performance Fee Note: chr [1:980] NA NA NA NA ...
$ Redemption Fee : chr [1:980] NA "5.000" ".000" ".000" ...
$ Hurdle Rate : chr [1:980] "-NA" "-NA" "10.000" "-NA" ...
$ High Watermark : chr [1:980] "Yes" "Yes" "Yes" "Yes" ...
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehler if in for-Schleife

Beitrag von jogo »

Hallo Zabel,

Dein Ansinnen klingt verdammt nach subset()

Code: Alles auswählen

fee20 <- subset(data_all, `Performance Fee`==20))
hoffentlich stört das Leerzeichen im Spaltennamen nicht.

kleiner Test:

Code: Alles auswählen

B <- BOD
names(B)[2] <- "de mand"

subset(B, `de mand`> 16)
... sollte also funktionieren.

Gruß, Jörg
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehler if in for-Schleife

Beitrag von bigben »

Hallo Zabel,

Jörg hat natürlich Recht. Unabhängig davon gelingt es mir nicht, Deinen Fehler zu reproduzieren.
Zunächst versuche ich, mir möglichst ähnlich strukturierte Daten zu erstellen:

Code: Alles auswählen

library(tibble)
data_all <- data.frame(a = as.numeric(18:24))
names(data_all) = "Performance Fee"
data_all <- tibble(data_all)
str(data:all)
Dann den Teil Deines Codes laufen zu lassen, der nicht von anderen Datenstrukturen abhängig ist:

Code: Alles auswählen

for (i in 1:length(data_all$`Performance Fee`)){
  if(data_all$`Performance Fee`[i]==20){
    cat(i);cat("\n")
  }
}
Das läuft. Also wenn Du nicht Jörgs Empfehlung weiter folgen sondern das selbst programmieren willst, musst Du uns ein reproduzierbares Beispiel basteln, d. h. Beispieldaten und Code, der anhand der Beispieldaten den Fehler reproduziert.

In der Zeile drunter gibt es einen klaren Fehler:

Code: Alles auswählen

fee20[,i]<-data_all$`Performance Fee`[,i]
In die eckige Klammer gehört kein Komma, aber da sind wir ja schon vorher wegen des anderen Fehlers ausgestiegen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Zabel
Beiträge: 13
Registriert: Mo Okt 28, 2019 11:41 am

Re: Fehler if in for-Schleife

Beitrag von Zabel »

Vielen Dank an euch beide! Bin wie gesagt noch nicht so erfahren.....

Ihr habt mir den Nachmittag vergoldet!

Liebe Grüße
Zabel
Antworten