2017-12-04 11 views
-1

Ich versuche Ausreißer in einem tibble, indem sie sie mit NAs ersetzen. Unten ist mein Code:Unerwartete "=" in der Mutate-Anweisung

for (i in colnames(numTable)){ 
    m <- mean(pull(numTable[,i]), na.rm=TRUE) 
    s<-sd(pull(numTable[,i]),na.rm=TRUE) 
    numTable %>% 
     mutate(numTable[,i] = replace(numTable[,i], abs(numTable[,i]-m)>3*s,na.rm=TRUE), NA) 
} 

NumTable wie folgt aussieht: enter image description here

ich Fehlermeldungen werden immer, dass

sagt mir
Error: unexpected '=' in: 
     " numTable %>% 
     mutate(numTable[,i] =" 

Bitte helfen. Vielen Dank.

+2

Warum brauchen Sie eine 'for' -Schleife? Sie können 'mutate_all' oder' mutate_at' verwenden, dh 'numTable%>% mutate_all (Spaß (ersetzen (., Abs (.- Mittelwert (., Na.rm = TRUE))> 3 * sd (., Na.rm = TRUE)), NA) ' – akrun

+0

Ich änderte es in' numTable%>% muate_at (Spaß (ersetzen (numTable [, i], abs (numTable [, i] -m)> 3 * s (numTable [, i] , na.rm = TRUE)), NA)) 'aber Fehler bekommen' Fehler: Kann keinen Aufruf zu einem nicht aufrufbaren Objekt erzeugen '@akrun – Eva

+0

Ich sagte 'mutate_all' anstelle von' mutate_at' Wenn du' mutate_at' verwendest , Sie müssen den Spaltenindex oder die Namen angeben – akrun

Antwort

0

@ akruns vorgeschlagene Version funktioniert, aber es hat ein paar Tippfehler. diejenigen, die folgende Codezeile läuft ohne Fehler nach der Korrektur:

numTable %>% mutate_all(funs(replace(., abs(. - mean(., na.rm = TRUE)) > 3 * sd(., na.rm = TRUE), NA))) 

Getestet habe ich diese mit den ersten beiden Spalten Ihrer Daten. Da die Ungleichheitsbedingung nicht in diesen Spalten erfüllt ist, ich wieder lief er die „3 * sd“ auf „1 * sd“ ändern und erhalten die folgenden, was ich denke, das widerspiegelt, was Sie wollen:

# A tibble: 6 x 2 
    M  R 
    <dbl> <dbl> 
1 138 NA 
2 240 14 
3 NA  6 
4 NA NA 
5 239 20 
6 253 10 

Wenn Sie sind unsicher, was hier los ist, empfehle ich Sie mit einer vereinfachten Version zu starten, wie zum Beispiel:

numTable %>% mutate_all(funs(. * 100)) 

und dann nach und nach auf den Code von @akrun bereitgestellt konvertieren über.