Seite 1 von 2
Data Frames
Verfasst: Mo Jan 18, 2021 11:59 am
von mango52
Hi,
bin ganz neu in der Welt von R und bin gerade dabei meine erste Aufgabe zu bewältigen
Zur Aufgabe: ich möchte gerne einen Teil einer Spalte auswählen und jeden Eintrag mit einem Skalar multiplizieren.
Zuerst hab ich mal mit str(name) abgefragt welche Struktur meine Tabelle ist - data Frame (war unsicher weil ich ein .csv hochgeladen hab)
dann konnte ich auch leicht den Teil des Data Frames auswählen mit dem ich weiterarbeiten möchte mittels
name[11:52, 3] (also die Zeilen 11 bis 52 in der 3.Spalte)
nun möchte ich jeden dieser Werte mit derselben Zahl multiplizieren, da stieß ich auf Probleme, hätte zB mal einfach versucht:
x<-name[11:52, 3]
x*2
-> hat nicht funktioniert
dann hab ich mir überlegt daraus irgendwie eine Vektoren zu bauen:
x<-c(name[11:52, 3])
x*2
-> ging leider auch nicht
jetzt bin ich etwas ratlos, hatte auch schon die Idee eine Matrix aus dem Dataframe zu machen und schauen ob es da funktioniert aber kam auch da nicht weiter...
danke im Voraus für Hilfe!
LG
Re: Data Frames
Verfasst: Mo Jan 18, 2021 12:10 pm
von bigben
Hallo Mango,
willkommen im Forum.
mango52 hat geschrieben: Mo Jan 18, 2021 11:59 amnun möchte ich jeden dieser Werte mit derselben Zahl multiplizieren, da stieß ich auf Probleme, hätte zB mal einfach versucht:
x<-name[11:52, 3]
x*2
-> hat nicht funktioniert
Das sollte funktioniert haben in dem Sinne, dass Dir die "doppelten" Werte ausgegeben wurden. Du hast R nicht gesagt, dass Du diese Werte "zurückschreiben" willst.
Funktioniert das hier?
Ansonsten bietet es sich für das Forum immer an, bei Fragen ein kleines Beispiel mit Code zu schreiben, mit dem wir das Problem auf unseren Rechnern nachstellen können. Beispieldaten könnten so aussehen:
Code: Alles auswählen
bsp <- data.frame(a = runif(10), b = runif(10), c = runif(10))
print(bsp)
bsp[1:3, 1:3] <- 100 * bsp[1:3, 1:3]
print(bsp)
Das nur für die nächste Frage.
LG
Bernhard
Re: Data Frames
Verfasst: Mo Jan 18, 2021 12:22 pm
von mango52
Hi,
erstmal vielen dank für die schnelle Antwort,
leider bekomme ich wieder die Fehlermeldung:
Warnmeldung:
In Ops.factor(2, name[11:52,3],2): "*" not meaningful for factors
LG
Re: Data Frames
Verfasst: Mo Jan 18, 2021 1:00 pm
von bigben
Ok, das konnte man nicht ahnen, ohne die Fehlermeldung zu kennen. factors sind R's Weg um nominale Variablen abzubilden. Wenn Du Daten hast, die R für nominal hält, dann kannst Du die natürlich nicht mit 2 multiplizieren. Wir müssen uns also die Frage stellen, wie die Daten in Deine R Session gekommen sind und wo da welcher Fehler unterlaufen ist.
Zuerst hab ich mal mit str(name)
Und was ist dabei herausgekommen? Da sollte schon stehen, ob eine Spalte numeric oder factor ist. Mit welchem Befehl hast Du die csv eingelesen? Ist die CSV mit Kommas getrennt oder mit Semikolons? Wie sind fehlende Werte eingetragen? Wurde irgendwo einmal versehentlich der Buchstabe "O" anstelle des Wertes "0" eingetragen? Sowas kann alles Einfluss darauf nehmen, ob Werte als Zahl oder als factor eingelesen werden.
LG,
Bernhard
Re: Data Frames
Verfasst: Mo Jan 18, 2021 1:09 pm
von mango52
Hi,
Eingelesen hab ich mit
name <- read.csv2("C:...", header=TRUE, sep=";")
bei str(name) ist gekommen dass es ein Data Frame ist.
vielleicht liegt es also daran dass in einer Spalte ein Buchstabe vorkommt? Aber ausgewählt hab ich eine Spalte welche nur mit Zahlen befüllt ist.
LG
Re: Data Frames
Verfasst: Mo Jan 18, 2021 1:13 pm
von jogo
mango52 hat geschrieben: Mo Jan 18, 2021 1:09 pm
Eingelesen hab ich mit
name <- read.csv2("C:...", header=TRUE, sep=";")
bei str(name) ist gekommen dass es ein Data Frame ist.
Und was steht für die einzelnen Spalten?
... sind sie
num oder
factor -- genau deshalb solltest Du das gesamte Ergebnis von
str(name) hier posten.
vielleicht liegt es also daran dass in einer Spalte ein Buchstabe vorkommt?
ja, an sowas kann es liegen.
Aber ausgewählt hab ich eine Spalte welche nur mit Zahlen befüllt ist.
Das glaub ich so nicht. Es gibt eine großen Unterschied zwischen
"3" und
3
Gruß, Jörg
Re: Data Frames
Verfasst: Mo Jan 18, 2021 1:27 pm
von mango52
Hallo Jörg,
die gesamte Ausgabe sieht wie folgt aus:
Code: Alles auswählen
'data.frame': 52 obs. of 6 variables:
$ Date: Factor w/ 52 levels "200W1","200W2",..: 1 2 3 4 5 6 7 8 9 10 ...
$ A : Factor w/ 38 levels "-0.9","-0.4",..: 38 33 35 34 29 29 23 2 9 11 ...
$ B : Factor w/ 44 levels "4.8","-5.3",..: 43 44 15 16 42 41 38 9 4 3 ...
$ C : Factor w/ 43 levels "-2.9","-3","-4.3",..: 41 36 39 43 13 15 14 35 5 8 ...
$ D : Factor w/ 41 levels "-0.1","-0.2",..: 41 40 39 34 35 34 22 8 16 18 ...
$ E : Factor w/ 34 levels "-0.3","-1","1",..: 32 33 31 28 31 21 15 4 6 7 ...
Also hab ich vorhin übersehen (sorry), hier steht eh überall Factor - jetzt ist die Frage wie ich das ganze numerisch bekomme
LG
PS habs jetzt schon mit
versucht aber hat nicht funktioniert...
Re: Data Frames
Verfasst: Mo Jan 18, 2021 1:43 pm
von jogo
Hallo mango,
schau mal, ob es besser wird, wenn Du per
einliest.
Gruß, Jörg
Re: Data Frames
Verfasst: Mo Jan 18, 2021 1:55 pm
von mango52
super danke jetzt ist alles numerisch - dafür funktioniert der Befehl
nicht mehr (keine Fehlermeldung sondern es kommen einfach irgendwelche Zahlen, die nirgends in meiner Tabelle vorkommen)
woran liegt das? Also haben die verschiedenen Strukturen wie Table, Matrix, Data frame ect. auch andere Befehle?
LG
Re: Data Frames
Verfasst: Mo Jan 18, 2021 2:04 pm
von jogo
mango52 hat geschrieben: Mo Jan 18, 2021 1:55 pm
super danke jetzt ist alles numerisch - dafür funktioniert der Befehl
nicht mehr (keine Fehlermeldung sondern es kommen einfach irgendwelche Zahlen, die nirgends in meiner Tabelle vorkommen)
Die CSV-Datei kannst Du nicht zufällig hier mal an eine Nachricht dranhängen?
Das würde die Fehlersuche enorm beschleunigen.
woran liegt das? Also haben die verschiedenen Strukturen wie Table, Matrix, Data frame ect. auch andere Befehle?
Du meinst beim Einlesen? nein, read.table() und read.csv2() u.a. sind eigentlich alle dasselbe; read.table() ist die grundlegende Funktion - alle anderen sind vorparametrisierte Versionen von read.table().
Der Hilfetext macht das schon recht deutlich.
Wenn es Probleme mit den Parametern der Einlesefunktionen gibt, sollte man immer read.table() verwenden, weil dort wirklich jeder Parameter gesetzt werden kann. Die vorparametrisierten Versionen sind gelegentlich etwas zickig, wenn man dort die Parameter doch anders als vordefiniert setzen möchte.
Gruß, Jörg