Mit while durch Excelfile gehen und Änderungen vornehmen

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

Moderatoren: EDi, jogo

leonard_24

Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von leonard_24 »

Hallo nochmal :)

habe folgendes Problem: Ich habe eine eingelesene Exceldatei (2 Spalten, ID und Firma) und möchte nun mittels einer Schleife durch die ID-Spalte gehen und die Zeichen "_" sowie "ID" entfernen, sodass z.B. in der ersten Zeile aus "WBEB_4123_ID" "WBEB4123" wird. Die Daten sind in der Variable "x" gespeichert.

Mein Code bisher:

n <- 1
while (x[n,1] != "") {

gsub ("_", "",x[n,1])
sub ("ID","", x[n,1])
n=n+1

}

Leider kommt als Fehlermeldung:

Error in while (x[n, 1] != " ") { : missing value where TRUE/FALSE needed

Kann mir jemand den Fehler sagen?

Gruß
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von jogo »

Hallo Leonard,

das geht ohne Schleife, weil R mit ganzen Vektoren arbeitet:

Code: Alles auswählen

x[, 1] <- gsub("_", "", sub("ID$", "", x[, 1]))
Test:

Code: Alles auswählen

y <- "WBEB_4123_ID"
gsub("_", "", sub("ID$", "", y))
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von bigben »

Während Jörgs Vorgehen das ganz klar bessere ist, beantwortet das aber noch nicht die Frage, wo der Fehler her kommt.

Was gibt R denn aus, wenn Du

Code: Alles auswählen

x[1,1] != ""
eingibst. Bzw was bei

Code: Alles auswählen

str(x[1,1])
?

Wenn das den Fehler nicht erklärt, was passiert bei

Code: Alles auswählen

str(x)
head(x)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
leonard_24

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von leonard_24 »

jogo hat geschrieben: So Aug 05, 2018 8:04 pm Hallo Leonard,

das geht ohne Schleife, weil R mit ganzen Vektoren arbeitet:

Code: Alles auswählen

x[, 1] <- gsub("_", "", sub("ID$", "", x[, 1]))
Test:

Code: Alles auswählen

y <- "WBEB_4123_ID"
gsub("_", "", sub("ID$", "", y))
Gruß, Jörg


Danke! Wusste gar nicht, dass das ohne Schleife geht :)
Kannst du mir vllt. kurz den Syntax erklären? Warum kann man den "sub" in den "gsub" reinschachteln, ohne, dass bei der "gsub" Funktion die Spalte als letztes Element in der Funktion auftaucht?

Viele Grüße
Zuletzt geändert von leonard_24 am Mo Aug 06, 2018 7:54 pm, insgesamt 1-mal geändert.
leonard_24

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von leonard_24 »

bigben hat geschrieben: Mo Aug 06, 2018 2:23 pm Während Jörgs Vorgehen das ganz klar bessere ist, beantwortet das aber noch nicht die Frage, wo der Fehler her kommt.

Was gibt R denn aus, wenn Du

Code: Alles auswählen

x[1,1] != ""
eingibst. Bzw was bei

Code: Alles auswählen

str(x[1,1])
?

Wenn das den Fehler nicht erklärt, was passiert bei

Code: Alles auswählen

str(x)
head(x)
LG,
Bernhard
Wenn ich str(x) mache, kommt:

data.frame': 99 obs. of 10 variables:
$ ID : chr "WBEB_4123_ID" "EIÖI_2872_ID" "MSPS_1564_ID" "BLÖL_1074_ID" ...
$ Firma : chr "Walmart" ...
...

also so wie es sein sollte. Mit str(x[1,1]) kommt chr "WBEB_4123_ID"
Den Fehler habe ich also bisher noch nicht gefunden...
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von jogo »

leonard_24 hat geschrieben: Mo Aug 06, 2018 7:47 pm
jogo hat geschrieben: So Aug 05, 2018 8:04 pm das geht ohne Schleife, weil R mit ganzen Vektoren arbeitet:

Code: Alles auswählen

x[, 1] <- gsub("_", "", sub("ID$", "", x[, 1]))
Test:

Code: Alles auswählen

y <- "WBEB_4123_ID"
gsub("_", "", sub("ID$", "", y))
Danke! Wusste gar nicht, dass das ohne Schleife geht :)
Es ist in R ganz selten, dass eine explizite Schleife wirklich notwendig ist.
Kannst du mir vllt. kurz den Syntax erklären? Warum kann man den "sub" in den "gsub" reinschachteln, ohne, dass bei der "gsub" Funktion die Spalte als letztes Element in der Funktion auftaucht?
Die Dokumentation von sub() sagt im Abschnitt Value, dass als Ergebnis die veränderte Zeichenkette bzw. der char-Vektor zurückgliefert wird.
Na ja, und dieser Vektor wird gleich weiter verarbeitet.
Das ist nicht sehr viel anders als statt

Code: Alles auswählen

a <- 3+4
b <- a + 11
zu rechnen:

Code: Alles auswählen

b <- (3+4) +11
oder möchtest Du lieber schreiben:

Code: Alles auswählen

b <- '+'('+'(3, 4), 11)
:?:

Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von EDi »

Polnische Notation? https://en.m.wikipedia.org/wiki/Polish_notation
oder möchtest Du lieber schreiben:G

Code: Alles auswählen

b <- '+'('+'(3, 4), 11)
:?:

Gruß, Jörg
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von bigben »

jogo hat geschrieben: Mo Aug 06, 2018 8:35 pm

Code: Alles auswählen

b <- '+'('+'(3, 4), 11)
NEin, sowas möchte ich nicht schreiben. Wenn schon Praefixnotation, dann auch konsequent:

Code: Alles auswählen

'<-'(b, '+'('+'(3, 4), 11))
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von jogo »

sehr gut!
Da ist mir wieder ein Schmankerl entwischt. :lol:

Danke, Bernhard, Du hast mich auf meine erste Frage auf SO gebracht:
https://stackoverflow.com/questions/517 ... s-an-error

Gruß, Jörg
leonard_24

Re: Mit while durch Excelfile gehen und Änderungen vornehmen

Beitrag von leonard_24 »

danke an euch! Hat vielleicht trotzdem einer eine Idee, warum die While Schleife nicht funktioniert.
Ich brauche nämlich dringend den Fehler, da meine Aufgabe, denke ich, nur mit einer while - Schleife funktioniert. Hier das Problem: (Ich erwarte nicht, dass mir irgendjemand einen Code gibt, nur eine Idee, warum mein Code nicht funktioniert):

Das Problem ist nämlich, ich arbeite mit einer Datenbank, die viele Firmen enthält; für jede gibt es eine Excelfile mit unterschiedlich vielen Entitäten. Jede Firma hat eine bestimmte Menge an Standardspalten (z.B. A bis O) wobei jede eine unterschiedliche Anzahl an zusätzlichen Spalten (Nr.1... Nr.n) besteht. Das Ziel ist es nun, abhängig von der Zeilenzahl und Spaltenzahl, jeweils durch die einzelnen Spalten zu gehen und diese Korrektur durchführen (bestimmtes Zeichen ersetzen). D.h. Spalte "Nr.1" soll durch alle Zeilen gehen und die Substitution durchgehen, anschließend Spalte "Nr.2" usw. bis man zur Spalte "Nr.n" gekommen ist.
Viele Grüße
Zuletzt geändert von leonard_24 am Di Aug 07, 2018 11:29 am, insgesamt 1-mal geändert.
Antworten