Versetztes Multipizieren von Werten aus Tabellenkalkulation
Versetztes Multipizieren von Werten aus Tabellenkalkulation
Hallo Leute,
ich habe zu dem Multiplizieren von Tabellen noch folgende Frage:
ich habe als Spaltenüberschrift Jahren von 2015 bis 2028. Nun muss ich die Wert von 2016 aus Tabelle 1 nehmen, mit dem Wert von 2016 aus Tabelle 2 multiplizieren, das Ergebnis aber in 2015 ausgeben usw. In 2028 soll dann als Ergebnis überall Null stehen, weil ich die Daten von 2029 und weiter nicht habe.
Welche Möglichkeiten gibt es dazu? Bisher habe ich gedacht, einfach berechnen wie es ist, d.h. 2016 in 2016, später dann die Spaltennamen umbenennen und die Spalte für 2028 hinzufügen mit Null-werten. Aber das ist ja nicht richtig, sondern nur das Ergebnis so hinpfuschen, wie man es braucht. Wie könnte man sonst machen? Wäre für Eure Hilfe dankbar!
LG
ademi
ich habe zu dem Multiplizieren von Tabellen noch folgende Frage:
ich habe als Spaltenüberschrift Jahren von 2015 bis 2028. Nun muss ich die Wert von 2016 aus Tabelle 1 nehmen, mit dem Wert von 2016 aus Tabelle 2 multiplizieren, das Ergebnis aber in 2015 ausgeben usw. In 2028 soll dann als Ergebnis überall Null stehen, weil ich die Daten von 2029 und weiter nicht habe.
Welche Möglichkeiten gibt es dazu? Bisher habe ich gedacht, einfach berechnen wie es ist, d.h. 2016 in 2016, später dann die Spaltennamen umbenennen und die Spalte für 2028 hinzufügen mit Null-werten. Aber das ist ja nicht richtig, sondern nur das Ergebnis so hinpfuschen, wie man es braucht. Wie könnte man sonst machen? Wäre für Eure Hilfe dankbar!
LG
ademi
Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation
Hallo ademi,
ohne reproduzierbares Beispiel ist das schwer zu beantworten. Z.B. kennt R keine Objektklasse mit dem Namen Tabelle.
Es könnte sich um eine Matrix oder einen Dataframe handeln.
Ich gehe jetzt mal davon aus, dass es sich um einen Dataframe handelt:
Eigentlich müsste auch gehen:
Wenn die Spalten in den beiden Tabellen alle nebeneinander liegen in dieser Reihenfolge, geht es noch einfacher.
Aber leider hast Du nichts über die Struktur der "Tabellen" verraten.
Noch eine Nachfrage:
Wäre es nicht besser, wenn in der letzten Spalte des Ergebnises NA steht
Gruß, Jörg
ohne reproduzierbares Beispiel ist das schwer zu beantworten. Z.B. kennt R keine Objektklasse mit dem Namen Tabelle.
Es könnte sich um eine Matrix oder einen Dataframe handeln.
Ich gehe jetzt mal davon aus, dass es sich um einen Dataframe handelt:
Code: Alles auswählen
Ergebnis <- as.data.frame(sapply(as.character(2016:2028), function(Spalte) Tabelle1[[Spalte]]*Tabelle2[[Spalte]]))
Ergebnis <- cbind(Ergebnis, 0)
names(Ergebnis) <- as.character(2015:2028)
Code: Alles auswählen
Spalten <- as.character(2016:2018)
Ergebnis <- as.data.frame(cbind(as.matrix(Tabelle1[, Spalten]) * as.matrix(Tabelle2[, Spalten]), 0))
names(Ergebnis) <- as.character(2015:2028)
Aber leider hast Du nichts über die Struktur der "Tabellen" verraten.
Noch eine Nachfrage:
Wäre es nicht besser, wenn in der letzten Spalte des Ergebnises NA steht
Gruß, Jörg
Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation
Hallo ademi,
der Beispielcode mit den Daten sollte von Dir kommen. Das mit dem "Hinpfuschen" ist per se nicht schlimm, wenn die Lösung gut funktioniert. Ich würde dann immer raten, das vermeintlich "hingepfuschte" in einer Funktion zusammenzustellen. Diese Funktion kann man dann auf Herz und Nieren prüfen und in der "eigentlichen" Rechnung ist es ein sauberer, ordentlicher Funktionsaufruf.
Mein Vorschlag sieht nochmal etwas anders aus als der von Jörg:
HTH,
Bernhard
der Beispielcode mit den Daten sollte von Dir kommen. Das mit dem "Hinpfuschen" ist per se nicht schlimm, wenn die Lösung gut funktioniert. Ich würde dann immer raten, das vermeintlich "hingepfuschte" in einer Funktion zusammenzustellen. Diese Funktion kann man dann auf Herz und Nieren prüfen und in der "eigentlichen" Rechnung ist es ein sauberer, ordentlicher Funktionsaufruf.
Mein Vorschlag sieht nochmal etwas anders aus als der von Jörg:
Code: Alles auswählen
# Funktionsdefinition ist nicht elegant, funktioniert aber
multiply.and.shift <- function(tab1, tab2, lastyear ="Jahresspaltenname"){
result <- tab1 * tab2
result$newcolumn123uniquename <- NA
colnames(result) <- c(lastyear, colnames(result)[-ncol(result)])
return(result)
}
# Beispieldaten sollten von Dir kommen
t1 <- data.frame(J2016 = rnorm(10), J2017 = 1:10, J2018 = runif(10), J2019=jitter(0:9))
t2 <- t1 + 1
# Bei der eigentlich Berechnung wirkt es dann wieder elegant
multiply.and.shift(t1, t2, "J2015")
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: Versetztes Multipizieren von Werten aus Tabellenkalkulation
Guten Morgen,
danke Jörg und Bernhard, ich lade noch ein Beispiel als Excel-Datei hoch. Alle dataframes sind bei mir so aufgebaut, dass sie die gleiche Struktur haben. Im Prinzip ganz einfach.
Es handelt sich um dataframe! Sorry, dass ich immer noch kein R-Vokabular verwende! und ja, es ist besser, dass in der letzten Spalte dann NA steht statt 0, das ist klar. Ich habe es als = bezeichnet, weil im Excel bei mir 0 steht :-/
LG
ademi
danke Jörg und Bernhard, ich lade noch ein Beispiel als Excel-Datei hoch. Alle dataframes sind bei mir so aufgebaut, dass sie die gleiche Struktur haben. Im Prinzip ganz einfach.
Es handelt sich um dataframe! Sorry, dass ich immer noch kein R-Vokabular verwende! und ja, es ist besser, dass in der letzten Spalte dann NA steht statt 0, das ist klar. Ich habe es als = bezeichnet, weil im Excel bei mir 0 steht :-/
LG
ademi
- Dateianhänge
-
- Beispiel.xlsx
- (15.81 KiB) 16-mal heruntergeladen
Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation
oh sorry, ich habe falsch verstanden. Hier ist der Code. Ich habe die Vorschläge zum versetzten Multiplizieren noch nicht ausprobiert, deshalb einfach multipliziert
Code: Alles auswählen
> deliveries <- read.csv("deliveries.csv", row.names=1)
> diesel_share <- read.csv("diesel share.csv", row.names=1)
> deliveries
X2018 X2019 X2020 X2021 X2022
Mercedes NA 897 365 438 967
Opel NA 582 785 213 561
Fiat NA 12 46 37 75
BMW NA 83 98 43 37
Audi NA 123 345 678 987
> diesel_share
X2018 X2019 X2020 X2021 X2022
Mercedes NA 0.5 0.5 0.5 0.5
Opel NA 0.5 0.5 0.5 0.5
Fiat NA 0.5 0.5 0.5 0.5
BMW NA 0.5 0.5 0.5 0.5
Audi NA 0.5 0.5 0.5 0.5
> production <- deliveries * diesel_share
> production
X2018 X2019 X2020 X2021 X2022
Mercedes NA 448.5 182.5 219.0 483.5
Opel NA 291.0 392.5 106.5 280.5
Fiat NA 6.0 23.0 18.5 37.5
BMW NA 41.5 49.0 21.5 18.5
Audi NA 61.5 172.5 339.0 493.5
Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation
Dann musst Du nach
nur noch das Ergebnis etwas ummodeln:
Gruß, Jörg
Code: Alles auswählen
production <- deliveries * diesel_share
Code: Alles auswählen
production <- cbind(production[-1], NA)
names(production) <- paste0("X", 2018:2023)
production
Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation
super, so mache ich es, danke nochmal!jogo hat geschrieben: ↑Fr Okt 18, 2019 11:10 am Dann musst Du nachnur noch das Ergebnis etwas ummodeln:Code: Alles auswählen
production <- deliveries * diesel_share
Gruß, JörgCode: Alles auswählen
production <- cbind(production[-1], NA) names(production) <- paste0("X", 2018:2023) production
lg
ademi
Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation
wobei geteilte Autos wohl nicht ausgeliefert werden, d.h., ohne ein kaufmännisches Runden wird es wohl nicht gehen
Grüße
Ruedi
Grüße
Ruedi
fortune(111)