Data Frames
Data Frames
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
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
Hallo Mango,
willkommen im Forum.
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:
Das nur für die nächste Frage.
LG
Bernhard
willkommen im Forum.
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?
Code: Alles auswählen
name[11:52, 3] <- 2 * name[11:52, 3]
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)
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: Data Frames
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
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
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.
LG,
Bernhard
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.Zuerst hab ich mal mit str(name)
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: Data Frames
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
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
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.
ja, an sowas kann es liegen.vielleicht liegt es also daran dass in einer Spalte ein Buchstabe vorkommt?
Das glaub ich so nicht. Es gibt eine großen Unterschied zwischen "3" und 3Aber ausgewählt hab ich eine Spalte welche nur mit Zahlen befüllt ist.
Gruß, Jörg
Re: Data Frames
Hallo Jörg,
die gesamte Ausgabe sieht wie folgt aus:
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...
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 ...
LG
PS habs jetzt schon mit
Code: Alles auswählen
as.numeric(as.character(f))
Re: Data Frames
Hallo mango,
schau mal, ob es besser wird, wenn Du per
einliest.
Gruß, Jörg
schau mal, ob es besser wird, wenn Du per
Code: Alles auswählen
name <- read.table("C:...", header=TRUE, sep=";")
Gruß, Jörg
Re: Data Frames
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
Code: Alles auswählen
name[11:52, 3]
woran liegt das? Also haben die verschiedenen Strukturen wie Table, Matrix, Data frame ect. auch andere Befehle?
LG
Re: Data Frames
Die CSV-Datei kannst Du nicht zufällig hier mal an eine Nachricht dranhängen?mango52 hat geschrieben: ↑Mo Jan 18, 2021 1:55 pm super danke jetzt ist alles numerisch - dafür funktioniert der Befehlnicht mehr (keine Fehlermeldung sondern es kommen einfach irgendwelche Zahlen, die nirgends in meiner Tabelle vorkommen)Code: Alles auswählen
name[11:52, 3]
Das würde die Fehlersuche enorm beschleunigen.
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().woran liegt das? Also haben die verschiedenen Strukturen wie Table, Matrix, Data frame ect. auch andere Befehle?
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