Versetztes Multipizieren von Werten aus Tabellenkalkulation

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

Moderatoren: EDi, jogo

Antworten
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von ademi »

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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von jogo »

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:

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)
Eigentlich müsste auch gehen:

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)
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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von bigben »

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:

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")
HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von ademi »

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
Dateianhänge
Beispiel.xlsx
(15.81 KiB) 16-mal heruntergeladen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von jogo »

ademi hat geschrieben: Fr Okt 18, 2019 8:01 am 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.
Bitte zusätzlich den Code angeben bis zum Einlesen der Excel-Datei :!:

Gruß, Jörg
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von ademi »

jogo hat geschrieben: Fr Okt 18, 2019 8:06 am
ademi hat geschrieben: Fr Okt 18, 2019 8:01 am 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.
Bitte zusätzlich den Code angeben bis zum Einlesen der Excel-Datei :!:

Gruß, Jörg
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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von jogo »

Dann musst Du nach

Code: Alles auswählen

production <- deliveries * diesel_share
nur noch das Ergebnis etwas ummodeln:

Code: Alles auswählen

production <- cbind(production[-1], NA)
names(production) <- paste0("X", 2018:2023)
production
Gruß, Jörg
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von ademi »

jogo hat geschrieben: Fr Okt 18, 2019 11:10 am Dann musst Du nach

Code: Alles auswählen

production <- deliveries * diesel_share
nur noch das Ergebnis etwas ummodeln:

Code: Alles auswählen

production <- cbind(production[-1], NA)
names(production) <- paste0("X", 2018:2023)
production
Gruß, Jörg
super, so mache ich es, danke nochmal!
lg
ademi
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von ruedi_br »

wobei geteilte Autos wohl nicht ausgeliefert werden, d.h., ohne ein kaufmännisches Runden wird es wohl nicht gehen ;)
Grüße
Ruedi
fortune(111)
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Versetztes Multipizieren von Werten aus Tabellenkalkulation

Beitrag von ademi »

ruedi_br hat geschrieben: Fr Okt 18, 2019 1:34 pm wobei geteilte Autos wohl nicht ausgeliefert werden, d.h., ohne ein kaufmännisches Runden wird es wohl nicht gehen ;)
Grüße
Ruedi
das stimmt wohl :lol: Finetuning kommt noch :D
Antworten