CSV-Export vom Bankkonto analysieren

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

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

Re: CSV-Export vom Bankkonto analysieren

Beitrag von jogo »

Hallo Bernhard,
bigben hat geschrieben: Di Dez 19, 2017 9:08 am
jogo hat geschrieben: Mo Dez 18, 2017 3:29 pm

Code: Alles auswählen

aggregate((-Betrag) ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)
Kannst Du mir die Formel da erklären? Schlägst Du wirklich einen Variablennamen vor, der ein Minus enthält? Den Trick mit der Klammer kannte ich nicht, aber ist das eine gute Idee?
Identifiers consist of a sequence of letters, digits, the period (‘.’) and the underscore. They must not start with a digit or an underscore, or with a period followed by a digit.
https://cran.r-project.org/doc/manuals/ ... dentifiers
der Name der Spalte ist schon "Betrag". ich wollte nur erreichen, dass das Vorzeichen gleich korregiert wird. Wenn man von "Ausgaben" spricht, wird der Wert (oft) positiv angegeben - dass dieser Wert dann negativ zu saldieren ist, steckt ja in dem Wort "Ausgaben".
Ob dies so funktioniert, habe ich jetzt wegen der Nichtbereitstellung von Daten, nicht überprüfen können.

Wenn man das Vorzeichen nicht umdrehen möchte, dann reicht

Code: Alles auswählen

aggregate(Betrag ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)
So, jetzt habe ich das ganze getestet mit eigenen Daten:

Code: Alles auswählen

library("lubridate")
U <- read.table(header=TRUE, text=
"Buchungstag  Betrag
03.01.17 34
04.01.17 -3.4
07.01.17 34
09.01.17 -0.34
10.01.17 34
03.01.17 -34")
U$BuTag <- as.Date(U$Buchungstag, format="%d.%m.%Y")
U$Jahr  <- year(U$BuTag)
U$Monat <- month(U$BuTag)

# subset(U, Betrag>=0 & Monat==1)
subset(U, Betrag<0 & Monat==1)
sum(subset(U, Betrag<0 & Monat==1)$Betrag)
aggregate(Betrag ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)
aggregate((-Betrag) ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum) # Vorzeichenumkehr
aggregate(-Betrag ~ Jahr + Monat, data=subset(U, Betrag<0), FUN=sum)   # ... und ohne Klammern
... stelle fest, dass die Idee, das Vorzeichen umzukehren, nicht so gut war, weil R dann einen anderen Spaltennamen für das Ergebnis konstruiert. :shock:
Danke, Berhard, dass Du mich darauf aufmerksam gemacht hast!

Wenn das so ist, kann man auch gleich

Code: Alles auswählen

aggregate(Betrag ~ Jahr + Monat + (Betrag<0), data=U, FUN=sum)
für die Berechnung von Einnahmen und Ausgaben erledigen.
(auch hierbei wird ein unschöner Spaltenname generiert)

... oder man verwendet xtabs()

Code: Alles auswählen

U <- read.table(header=TRUE, text=
"Buchungstag  Betrag
03.01.17 34
04.01.17 -3.4
07.01.17 34
09.01.17 -0.34
10.01.17 34
03.01.17 -34")
xtabs(Betrag ~ substr(U$Buchungstag, 4, 8) + (Betrag<0), data=U) # ... oder:
U$JaMo <- paste0(substr(U$Buchungstag, 7, 8), ".", substr(U$Buchungstag, 4, 5))
xtabs(Betrag ~ JaMo + (Betrag<0), data=U)
Und hier noch eine Variante mit data.table

Code: Alles auswählen

library("data.table")
U <- fread(
"Buchungstag  Betrag
03.01.17 34
04.01.17 -3.4
07.01.17 34
09.01.17 -0.34
10.01.17 34
03.01.17 -34")
# setnames(U[, sum(Betrag), .(substr(U$Buchungstag, 4, 8), (Betrag<0))], c("MoJa", "Ausgaben", "Betrag"))[]
dcast(U, substr(U$Buchungstag, 4, 8) ~  (Betrag<0), value.var = "Betrag", fun = sum)
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: CSV-Export vom Bankkonto analysieren

Beitrag von bigben »

Hallo Jörg,

das mit dem umgedrehten Vorzeichen ist gut, hat aber einen blöden Nebeneffekt: Auf dem letzten geposteten Screenshot erkennt man, dass das zu einem Spaltennamen mit einem Minus drin führt. Ohne Screenshot vorgeführt:

Code: Alles auswählen

beispiel <- data.frame( 
  id = gl(n = 5, k = 20),
  x = runif(100,0,100),
  y = 1.5*x+17+rnorm(100,sd = 20)
)

a <- aggregate((-y) ~ id, FUN = mean, data = beispiel)
str(a)

Code: Alles auswählen

> str(a)
'data.frame':	5 obs. of  2 variables:
 $ id  : Factor w/ 5 levels "1","2","3","4",..: 1 2 3 4 5
 $ (-y): num  -91.1 -86 -93.4 -92 -93.7
Das Potenzial für hässliche Bugs "further down the line", wie in

Code: Alles auswählen

> print(a$(-y))
Error: unexpected '(' in "print(a$("
erscheint mir sehr hoch.

LG,
Bernhard
---
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: CSV-Export vom Bankkonto analysieren

Beitrag von jogo »

Hallo Berhard,
bigben hat geschrieben: Di Dez 19, 2017 9:43 am das mit dem umgedrehten Vorzeichen ist gut, hat aber einen blöden Nebeneffekt: Auf dem letzten geposteten Screenshot erkennt man, dass das zu einem Spaltennamen mit einem Minus drin führt. Ohne Screenshot vorgeführt:

Das Potenzial für hässliche Bugs "further down the line", wie in

Code: Alles auswählen

> print(a$(-y))
Error: unexpected '(' in "print(a$("
erscheint mir sehr hoch.
da stimme ich Dir voll zu (kam in meiner Nachricht nicht deutlich zum Ausdruck). Da helfen dann nur besondere Aufmerksamkeit beim Zugriff oder Nacharbeiten zur Problembeseitigung:

Code: Alles auswählen

print(a$'(-y)')  # besondere Aufmerksamkeit

names(a)[2] <- "minus.y" # Nacharbeiten
print(a$minus.y)
Gruß, Jörg
Antworten