Werte von mehreren Tabellen multiplizieren
Werte von mehreren Tabellen multiplizieren
Hallo zusammen,
ich bin neu hier in Forum und generell in R. Ich habe keine Erfahrungen mit anderen Programmiersprachen und bisher nur Excel für meine Berechnungen verwendet. Nun möchte ich die Modelle, die wir im Betrieb mit Excel konstruiert haben, in R übertragen und vielleicht auch anders aufbauen (weil es langsam unübersichtlich wird) und habe damit begonnen, mich im Netz einzulesen und Sachen auszuprobieren. Nach mehreren Stunden Googeln habe ich aber keine passende Funktion zum Multiplizieren von Tabellen gefunden. Vielleicht könnte mir da jemand helfen. Eine Bespieldatei hänge ich an.
Vielen Dank.
ich bin neu hier in Forum und generell in R. Ich habe keine Erfahrungen mit anderen Programmiersprachen und bisher nur Excel für meine Berechnungen verwendet. Nun möchte ich die Modelle, die wir im Betrieb mit Excel konstruiert haben, in R übertragen und vielleicht auch anders aufbauen (weil es langsam unübersichtlich wird) und habe damit begonnen, mich im Netz einzulesen und Sachen auszuprobieren. Nach mehreren Stunden Googeln habe ich aber keine passende Funktion zum Multiplizieren von Tabellen gefunden. Vielleicht könnte mir da jemand helfen. Eine Bespieldatei hänge ich an.
Vielen Dank.
- Dateianhänge
-
- Beispiel.xlsx
- (15.13 KiB) 18-mal heruntergeladen
Re: Werte von mehreren Tabellen multiplizieren
Hallo und herzlichen Glückwunsch zu der Entscheidung, jetzt auf ein besser skalierbares System als Excel umzusteigen!
Du wirst in vielen Punkten umdenken müssen. Wir denken nicht in Tabellen sondern in Datensätzen und Die Anordung der Excel-Daten, wo Daten aus verschiedenen Tabellen in der gleichen Spalte untereinander stehen, das lässt alles noch erkennen, dass das Denken noch nicht auf R umgestellt ist.
Ich weiß auch nicht genau, was Du mit Tabellen multiplizieren meinst, aber vielleicht habe ich Dein Anliegen so gut verstanden, dass das hier weiter hilft:
Sonst bitte gerne nochmal mit genauerer Fragestellung.
LG,
Bernhard
Du wirst in vielen Punkten umdenken müssen. Wir denken nicht in Tabellen sondern in Datensätzen und Die Anordung der Excel-Daten, wo Daten aus verschiedenen Tabellen in der gleichen Spalte untereinander stehen, das lässt alles noch erkennen, dass das Denken noch nicht auf R umgestellt ist.
Ich weiß auch nicht genau, was Du mit Tabellen multiplizieren meinst, aber vielleicht habe ich Dein Anliegen so gut verstanden, dass das hier weiter hilft:
Code: Alles auswählen
Tabelle1 <- read.table(row.names = 1, header=TRUE,
text="Name 2019 2020 2021 2022
Mercedes 897 365 438 967
Opel 582 785 213 561
Fiat 12 46 37 75
BMW 83 98 43 37
Audi 123 345 678 987
")
Tabelle2 <- read.table(header = TRUE,
text="Name Diesel Benzin Hybrid
Mercedes 0.30 0.35 0.35
Opel 0.50 0.25 0.25
Fiat 0.45 0.45 0.10
BMW 0.30 0.35 0.35
Audi 0.35 0.35 0.30")
Tabelle1 * Tabelle2$Diesel
Tabelle1 * Tabelle2$Benzin
Tabelle1 * Tabelle2$Hybrid
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Werte von mehreren Tabellen multiplizieren
Hallo Bernhard,bigben hat geschrieben: ↑Do Sep 26, 2019 2:14 pm Hallo und herzlichen Glückwunsch zu der Entscheidung, jetzt auf ein besser skalierbares System als Excel umzusteigen!
Du wirst in vielen Punkten umdenken müssen. Wir denken nicht in Tabellen sondern in Datensätzen und Die Anordung der Excel-Daten, wo Daten aus verschiedenen Tabellen in der gleichen Spalte untereinander stehen, das lässt alles noch erkennen, dass das Denken noch nicht auf R umgestellt ist.
Ich weiß auch nicht genau, was Du mit Tabellen multiplizieren meinst, aber vielleicht habe ich Dein Anliegen so gut verstanden, dass das hier weiter hilft:
Sonst bitte gerne nochmal mit genauerer Fragestellung.Code: Alles auswählen
Tabelle1 <- read.table(row.names = 1, header=TRUE, text="Name 2019 2020 2021 2022 Mercedes 897 365 438 967 Opel 582 785 213 561 Fiat 12 46 37 75 BMW 83 98 43 37 Audi 123 345 678 987 ") Tabelle2 <- read.table(header = TRUE, text="Name Diesel Benzin Hybrid Mercedes 0.30 0.35 0.35 Opel 0.50 0.25 0.25 Fiat 0.45 0.45 0.10 BMW 0.30 0.35 0.35 Audi 0.35 0.35 0.30") Tabelle1 * Tabelle2$Diesel Tabelle1 * Tabelle2$Benzin Tabelle1 * Tabelle2$Hybrid
LG,
Bernhard
vielen Dank für die Ermunterung und die Hilfe. Das mit Umdenken ist klar - noch nicht stattgefunden, aber ich hoffe, es kommt mit der Zeit. Ich befasse mich mit R erst seit ein Paar Tagen.
Mit dem Multiplizieren von Tabellen habe ich es tatsächlich so gemeint, dass die Werte aus der ersten Tabelle mit den Werten aus der zweiten Tabelle multipliziert werden. Bei mir hat es nicht geklappt, weil ich, statt Vektoren aus den Spalten der zweiten Tabelle zu bilden, mit data.frames [eckige Klammer] multipliziert habe, und es gab immer eine Fehlermeldung, dass diese Funktion nur für Tabellen mit der gleichen Größe ist. Jetzt weiß ich es und bin sehr dankbar für die schnelle Aufklärung!
Liebe Grüße
Aijan
Re: Werte von mehreren Tabellen multiplizieren
Hallo,
ich habe folgendes Problem zu dem gleichen Thema. Wenn ich Werte von 2 Tabellen miteinander multipliziere, dann kommt es beim Multiplizieren logischerweise in der ersten Spalte überall NA, weil es Zeilennamen sind und nicht Zahlen. Wie kriege ich das hin, dass sie immer als Zeilennamen erkannt werden und nicht multipliziert?
Liebe Grüße
ich habe folgendes Problem zu dem gleichen Thema. Wenn ich Werte von 2 Tabellen miteinander multipliziere, dann kommt es beim Multiplizieren logischerweise in der ersten Spalte überall NA, weil es Zeilennamen sind und nicht Zahlen. Wie kriege ich das hin, dass sie immer als Zeilennamen erkannt werden und nicht multipliziert?
Liebe Grüße
Re: Werte von mehreren Tabellen multiplizieren
Hallo ademi,
R kennt Zeilennamen als eigene Entität. Du brauchst keine Spalte mit Eigennamen einzufügen. OBen hatte ich folgendes gepostet:
Dort liest Du row.names = 1 was soviel heißt wie: "Die Zeilennamen stehen in Spalte 1".
Wieviele Spalten hat die so eingelesene Tabelle?
Die Tabelle hat nur 4 Spalten weil die Zeilennamen nicht als Spalte zählen. Deshalb sind mit dieser Tabelle auch einfache Rechnungen möglich, beispielsweise
R hat anstandslos alle Spalten mit 2 multipliziert und sich um die Namen nicht gekümmert. Nehmen wir an, Du hättest keine Zeilennamen vergeben, stattdessen die Spalte 1 belassen:
Da kannst Du jetzt selbst prüfen, wieviele Spalten das hat. Wir können immer noch die Spaltennamen nach der ersten Spalte vergeben und dann Spalte 1 löschen:
In meiner Antwort oben hatte ich das für Tabelle1 und für Tabelle2 unterschiedlich gehandhabt. In Tabelle2 hatte ich die Namen-Spalte stehen lassen, aber Du weißt ja jetzt, wie Du das korrigieren kannst.
HTH,
Bernhard
R kennt Zeilennamen als eigene Entität. Du brauchst keine Spalte mit Eigennamen einzufügen. OBen hatte ich folgendes gepostet:
Code: Alles auswählen
Tabelle1 <- read.table(row.names = 1, header=TRUE,
text="Name 2019 2020 2021 2022
Mercedes 897 365 438 967
Opel 582 785 213 561
Fiat 12 46 37 75
BMW 83 98 43 37
Audi 123 345 678 987
")
Wieviele Spalten hat die so eingelesene Tabelle?
Code: Alles auswählen
> ncol(Tabelle1)
[1] 4
Code: Alles auswählen
> Tabelle1 * 2
X2019 X2020 X2021 X2022
Mercedes 1794 730 876 1934
Opel 1164 1570 426 1122
Fiat 24 92 74 150
BMW 166 196 86 74
Audi 246 690 1356 1974
Code: Alles auswählen
Tabelle1 <- read.table(header=TRUE,
text="Name 2019 2020 2021 2022
Mercedes 897 365 438 967
Opel 582 785 213 561
Fiat 12 46 37 75
BMW 83 98 43 37
Audi 123 345 678 987
")
Code: Alles auswählen
rownames(Tabelle1) <- Tabelle1[,1]
Tabelle1$Name <- NULL
HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Werte von mehreren Tabellen multiplizieren
Hallo Bernhard,bigben hat geschrieben: ↑Do Okt 10, 2019 2:26 pm Hallo ademi,
R kennt Zeilennamen als eigene Entität. Du brauchst keine Spalte mit Eigennamen einzufügen. OBen hatte ich folgendes gepostet:
Dort liest Du row.names = 1 was soviel heißt wie: "Die Zeilennamen stehen in Spalte 1".Code: Alles auswählen
Tabelle1 <- read.table(row.names = 1, header=TRUE, text="Name 2019 2020 2021 2022 Mercedes 897 365 438 967 Opel 582 785 213 561 Fiat 12 46 37 75 BMW 83 98 43 37 Audi 123 345 678 987 ")
erstmals vielen Dank für deine prompte Antwort und die Mühe, die Basics dem Anfänger zu zerkauen.
OK, das mit row.names =1 habe ich nicht beachtet und meine Daten so eingelesen. Jetzt aber, wenn ich versuche, das zu korrigieren, kommt eine Fehlermeldung
Meine Daten habe ich mir vorher als csv-Dateien gespeichert und mit read.csv eingelesen.Fehler in read.table(file = file, header = header, sep = sep, quote = quote, :
doppelte 'row.names' sind nicht zulässig
Woher kommt die Fehlermeldung?
und noch eine Frage: anstelle der leere Zeilen steht dann auch NA, wie kann man diese NA vermeiden, dass 0 oder gar nichts drin steht?
LG
ademi
Re: Werte von mehreren Tabellen multiplizieren
Hallo ademi,
über Fehlermeldungen lässt sich nur sprechen, wenn man den genauen Aufruf der Funktion kennt. Poste bitte eine kleine csv-Datei und das genaue Kommando, mit dem der Fehler entsteht sowie die genaue und vollständige Fehlermeldung.
Die Funktion read.csv und read.table sind übrigens weitgehend identisch. Bei read.csv ist im Wesentlichen nur header = TRUE und sep = "," voreingestellt. row.names sollte bei beiden gleich funktionieren.
LG,
Bernhard
über Fehlermeldungen lässt sich nur sprechen, wenn man den genauen Aufruf der Funktion kennt. Poste bitte eine kleine csv-Datei und das genaue Kommando, mit dem der Fehler entsteht sowie die genaue und vollständige Fehlermeldung.
Die Funktion read.csv und read.table sind übrigens weitgehend identisch. Bei read.csv ist im Wesentlichen nur header = TRUE und sep = "," voreingestellt. row.names sollte bei beiden gleich funktionieren.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Werte von mehreren Tabellen multiplizieren
ich habe jetzt versucht, ein paar Beispieldateien durchzuspielen, und diese funktionieren einwandfrei. Ich weiß nicht, wo das Problem bei den eigentlichen Dateien liegt... Für Beispieldateien habe ich die ursprünglichen Dateien genommen, einfach Kopien gemacht und Datensätze reduziert. Nun gut, ich muss da wohl alles neu einspielen.bigben hat geschrieben: ↑Do Okt 10, 2019 3:02 pm Hallo ademi,
über Fehlermeldungen lässt sich nur sprechen, wenn man den genauen Aufruf der Funktion kennt. Poste bitte eine kleine csv-Datei und das genaue Kommando, mit dem der Fehler entsteht sowie die genaue und vollständige Fehlermeldung.
Die Funktion read.csv und read.table sind übrigens weitgehend identisch. Bei read.csv ist im Wesentlichen nur header = TRUE und sep = "," voreingestellt. row.names sollte bei beiden gleich funktionieren.
LG,
Bernhard
Jetzt habe ich aber eine andere Frage, und weiß nicht, ob die man hier einfach stellen kann, und zwar
habe ich
Code: Alles auswählen
>ex= fleet*x2stroke
X2015 X2016 X2017 X2018 X2019 X2020 X2021 X2022 X2023
UL/VL CC 651 692 727 748 756 762 762 765 769
Suezmax 499 522 558 575 597 606 606 601 598
Aframax 631 643 664 694 705 691 673 650 635
Coated Aframax 287 309 334 350 369 385 400 414 430
Panamax Tanker 408 419 432 444 465 479 493 509 527
Handy Products Tanker 2034 2099 2149 2188 2233 2247 2265 2275 2299
Small Products Tanker 0 0 0 0 0 0 0 0 0
Crude & Products Tankers 6882 7056 7204 7322 7419 7442 7442 7430 7452
Handy Chemical Tanker 1501 1583 1637 1688 1728 1761 1811 1861 1906
Small Chemical Tanker 0 0 0 0 0 0 0 0 0
Chemical Tankers 2799 2886 2927 2970 3010 3076 3166 3265 3356
Handy Misc. Tanker 75 82 85 90 92 92 92 92 93
Small Misc. Tanker 0 0 0 0 0 0 0 0 0
Misc Tankers 0 0 0 0 0 0 0 0 0
Total Tankers 9998 10264 10455 10624 10766 10856 10949 11038 11155
Code: Alles auswählen
> twostroke.kw
kW
UL/VL CC 3270
Suezmax 2380
Aframax 2380
Coated Aframax 2380
Panamax Tanker 2380
Handy Products Tanker 1660
Small Products Tanker 870
Crude & Products Tankers NA
Handy Chemical Tanker 870
Small Chemical Tanker 870
Chemical Tankers NA
Handy Misc. Tanker 870
Small Misc. Tanker 870
Misc Tankers NA
Total Tankers NA
zusammengefügt mit cbind(twostroke.kw, ex)
Code: Alles auswählen
kW X2015 X2016 X2017 X2018 X2019 X2020 X2021 X2022
UL/VL CC 3270 651 692 727 748 756 762 762 765
Suezmax 2380 499 522 558 575 597 606 606 601
Aframax 2380 631 643 664 694 705 691 673 650
Coated Aframax 2380 287 309 334 350 369 385 400 414
Panamax Tanker 2380 408 419 432 444 465 479 493 509
Handy Products Tanker 1660 2034 2099 2149 2188 2233 2247 2265 2275
Small Products Tanker 870 0 0 0 0 0 0 0 0
Crude & Products Tankers NA 6882 7056 7204 7322 7419 7442 7442 7430
Handy Chemical Tanker 870 1501 1583 1637 1688 1728 1761 1811 1861
Small Chemical Tanker 870 0 0 0 0 0 0 0 0
Chemical Tankers NA 2799 2886 2927 2970 3010 3076 3166 3265
Handy Misc. Tanker 870 75 82 85 90 92 92 92 92
Small Misc. Tanker 870 0 0 0 0 0 0 0 0
Misc Tankers NA 0 0 0 0 0 0 0 0
Total Tankers NA 9998 10264 10455 10624 10766 10856 10949 11038
Jetzt möchte ich die Daten aggregieren, d.h. Zahlen für Motoren mit gleichen Daten sollen summiert werden mit
Code: Alles auswählen
> aggregate(ex, by=list(ex$kW), sum)
Group.1 kW X2015 X2016 X2017 X2018 X2019 X2020 X2021 X2022 X2023 X2024 X2025
1 870 4350 1576 1665 1722 1778 1820 1853 1903 1953 1999 2052 2108
2 1660 1660 2034 2099 2149 2188 2233 2247 2265 2275 2299 2312 2327
3 2380 9520 1825 1893 1988 2063 2136 2161 2172 2174 2190 2203 2215
4 3270 3270 651 692 727 748 756 762 762 765 769 777 785
X2026 X2027 X2028
1 2157 2216 2267
2 2339 2351 2353
3 2229 2246 2248
4 793 800 807
Liebe Grüße
Re: Werte von mehreren Tabellen multiplizieren
Du könntest entweder die zweite Spalte kW löschen nach dem aggregieren oder das cbind weglassen und aggregate die Daten von vor dem cbind übergeben oder als erstes Argument nicht alle sondern nur die relevanten Spalten übergeben.
Wenn Du ein lauffähiges komplettes Minimalbeispiel postest, mache ich das auch vor.
Wenn Du ein lauffähiges komplettes Minimalbeispiel postest, mache ich das auch vor.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Werte von mehreren Tabellen multiplizieren
Guten Morgen Bernhard,bigben hat geschrieben: ↑Do Okt 10, 2019 5:44 pm Du könntest entweder die zweite Spalte kW löschen nach dem aggregieren oder das cbind weglassen und aggregate die Daten von vor dem cbind übergeben oder als erstes Argument nicht alle sondern nur die relevanten Spalten übergeben.
Wenn Du ein lauffähiges komplettes Minimalbeispiel postest, mache ich das auch vor.
wenn ich das cbind weglasse, wüsste ich nicht, wie ich dann die KW-Daten mit Stückzahlen verbinde. Diese bräuchte ich um die Zahlen zu aggregieren, denn es muss nach Leistung der Motoren erfolgen und nicht nach Schiffsname... Es sei denn, ich füge diese Daten von Anfang dem Datensatz hinzu.
Ich lade zwei .csv Dateien hoch, die dritte wird irgendwie nicht angehängt, aber auch 2 reichen als Beispiel...
Danke!
- Dateianhänge
-
- twostroke.engine.kw.csv
- (335 Bytes) 21-mal heruntergeladen
-
- Fleet (2).csv
- (1.25 KiB) 19-mal heruntergeladen