For schleife

For(), If(), While() und Verwandte. Diskussion von programmiertechnischen Fragen.

For schleife

Beitragvon larsmu » Mi 28. Jun 2017, 22:22

Guten Abend ich hab ein Problem ich habe eine Tabelle in der Jahre, Preis und Menge drin stehen.
Nun möchte ich den Umsatz der Jahre 2005 - 2010 ausrechnen und in einer Tabelle einzeln nach Jahr gegliedert darstellen.

ich hab mich auch schon versucht, aber komme leider nicht auf das Ergebnis.

"ende<- c()

for (i in 1:6)
{
year<-which(tabelle[,"jahr"] == "i+2004")
datenyear<-tabelle[year,]
ende[i]<-sum(datenyear[,"menge"]*datenyear[,"preis"])
}

ende"


Ich wäre echt mega dankbar wenn mir dort jemand weiterhelfen könnte.

LG
larsmu
 
Beiträge: 6
Registriert: Mi 28. Jun 2017, 22:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: For schleife

Beitragvon larsmu » Mi 28. Jun 2017, 22:56

die struktur der Tabelle:

> str(tabelle)
'data.frame': 270 obs. of 4 variables:
$ jahr : int 2005 2005 2006 2005 2005 2005 2005 2006 2005 2005 ...
$ staat: chr "Deutschland" "Deutschland" "Deutschland" "Deutschland" ...
$ preis: num 6.94 21.42 37.89 19.06 29.62 ...
$ menge: int 4 7 7 10 9 1 5 5 4 7 ...
larsmu
 
Beiträge: 6
Registriert: Mi 28. Jun 2017, 22:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: For schleife

Beitragvon Hufeisen » Do 29. Jun 2017, 07:49

Ich denke, das bekommst du selbst hin ;) .Ich versuche mal, Hilfe zur Selbsthilfe zu geben. Deine Schleife kannst du selbst mit dem Kommando print() auf Richtigkeit in jedem Schritt überprüfen, indem du dir die Objekte deiner Zwischenschritte ausgeben lässt und schaust, ob sie das liefern, was du möchtest. Trotzdem gibt es natürlich einiges zu verbessern.
Code: Alles auswählen
"ende<- c()

Das Zielobjekt vor der Schleife zu definieren, ist sinnvoll. Aber du solltest dir überlegen, welche Form ende für deine Aufgabe haben muss. Dann kannst du es direkt als vector() oder matrix() anlegen. So ist es auch leichter für dich später und andere, den Code nachzuvollziehen.
Code: Alles auswählen
year<-which(tabelle[,"jahr"] == "i+2004")

hier sollte der Befehl arr.ind = T helfen.

Den Rest solltest du schaffen. Wenn nicht, gib Bescheid. :)
Neu in R, versuche trotzdem zu helfen.
Hufeisen
 
Beiträge: 115
Registriert: Di 31. Jan 2017, 19:15
Danke gegeben: 0
Danke bekommen: 1 mal in 1 Post

Re: For schleife

Beitragvon larsmu » Do 29. Jun 2017, 10:17

Danke für die Hilfe.
Ich kenne den Befehl arr.ind = T leider nicht was tut er und wie benutze ich ihn?
Die erste Zeile macht wohl schon Probleme aus
Code: Alles auswählen
year<-which(tabelle[,"jahr"] == "i+2004")


wenn ich dort nämlich print mache kommt 6 mal interger 0
larsmu
 
Beiträge: 6
Registriert: Mi 28. Jun 2017, 22:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: For schleife

Beitragvon larsmu » Do 29. Jun 2017, 11:46

Kann mir niemand bei dem Problem helfen?
larsmu
 
Beiträge: 6
Registriert: Mi 28. Jun 2017, 22:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: For schleife

Beitragvon larsmu » Do 29. Jun 2017, 13:00

Geht es auch ohne den Befehl data.table weil R studio findet den Befehl irgendwie nicht
larsmu
 
Beiträge: 6
Registriert: Mi 28. Jun 2017, 22:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: For schleife

Beitragvon larsmu » Do 29. Jun 2017, 13:23

Nein leider nicht. Ich habe das Problem nun anders gelöst aber dadurch ist ein neues Problem ausfgetreten:
Code: Alles auswählen
umsatze <- tabelle[,"preis"] * tabelle[,"menge"]
enden <- tapply(umsatze, tabelle[,"jahr"], FUN=sum)
enden


Nun habe ich meine Werte aber in einem 1 dimensionalen Vektor. Ich würde aber gerne eine Regression der Werte machen wie ziehe ich die erste Zeile in einen Vektor und wie die 2 in einen anderen?
Im Moment sieht mein Ergebnis nämlich so aus:
Code: Alles auswählen
> enden
   2005    2006    2007    2008    2009    2010    2011    2012    2015    2016
2488.38 4509.80 2545.21 3988.94 5581.81 6189.44 6391.61 6236.95 6395.16 7536.19
>


aber ich hätte es gerne irgendwie so:
Code: Alles auswählen
x<- c(2488.38, 4509.8, 2545.21, 3988.94, 5581.81, 6189.44,6391.61, 6236.95, 6395.16, 7536.19)
y<-c("2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2015", "2016")


Ist das möglich?
larsmu
 
Beiträge: 6
Registriert: Mi 28. Jun 2017, 22:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: For schleife

Beitragvon Hufeisen » Fr 30. Jun 2017, 09:40

larsmu hat geschrieben:Ich kenne den Befehl arr.ind = T leider nicht was tut er und wie benutze ich ihn?
Die erste Zeile macht wohl schon Probleme aus
Code: Alles auswählen
year<-which(tabelle[,"jahr"] == "i+2004")


wenn ich dort nämlich print mache kommt 6 mal interger 0

Genau so solltest du vorgehen - mit Fehlerdiagnosen in kleinen Schritten. Nützlich dafür ist RStudio, das bringt im Fenster unten rechts die Hilfeseiten für R mit. Da solltest du bei Problemen die Seiten für die von dir benutzten Befehle durchgehen. Die Hilfeseiten sind nicht immer leicht verständlich, aber da muss man einfach durch. Die Hilfeseiten kannst du auch aus der Konsole heraus aufrufen mit ?Befehl, beispielsweise ?which. Dort stehen am Anfang die Standardeinstellung für die optionalen Arrgumente jedes Befehls, etwa für arr.ind = F. Dieser Befehl sollte in deinem Fall aber keine Verbesserung bringen, da du nur mit einem Vektor arbeitest.

Das Problem dürften an dieser Stelle die Anführungszeichen sein. Ich denke R sucht den string i+2004 statt nach der Summe aus i und 2004. In RStudio erkennt man so etwas dank farblicher Unterscheidung von Operatoren und "Text" recht schnell.

Wie Zaungast auch, möchte ich darauf hinweisen, dass es mit Beispieldaten leichter ist, zu helfen.
Neu in R, versuche trotzdem zu helfen.
Hufeisen
 
Beiträge: 115
Registriert: Di 31. Jan 2017, 19:15
Danke gegeben: 0
Danke bekommen: 1 mal in 1 Post


Zurück zu Programmierkonzepte

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron