Data Frames

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

Moderatoren: EDi, jogo

mango52
Beiträge: 12
Registriert: Mo Jan 18, 2021 11:15 am

Data Frames

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

Re: Data Frames

Beitrag 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?

Code: Alles auswählen

name[11:52, 3] <- 2 * name[11:52, 3]
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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
mango52
Beiträge: 12
Registriert: Mo Jan 18, 2021 11:15 am

Re: Data Frames

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

Re: Data Frames

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
mango52
Beiträge: 12
Registriert: Mo Jan 18, 2021 11:15 am

Re: Data Frames

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

Re: Data Frames

Beitrag 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
mango52
Beiträge: 12
Registriert: Mo Jan 18, 2021 11:15 am

Re: Data Frames

Beitrag 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

Code: Alles auswählen

as.numeric(as.character(f))
versucht aber hat nicht funktioniert...
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Data Frames

Beitrag von jogo »

Hallo mango,

schau mal, ob es besser wird, wenn Du per

Code: Alles auswählen

name <- read.table("C:...", header=TRUE, sep=";")
einliest.

Gruß, Jörg
mango52
Beiträge: 12
Registriert: Mo Jan 18, 2021 11:15 am

Re: Data Frames

Beitrag von mango52 »

super danke jetzt ist alles numerisch - dafür funktioniert der Befehl

Code: Alles auswählen

name[11:52, 3] 
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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Data Frames

Beitrag von jogo »

mango52 hat geschrieben: Mo Jan 18, 2021 1:55 pm super danke jetzt ist alles numerisch - dafür funktioniert der Befehl

Code: Alles auswählen

name[11:52, 3] 
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
Antworten