Matrix aus Tabellenzeile erstellen
Matrix aus Tabellenzeile erstellen
Guten Tag, ich habe folgende Aufgabe:
Mit liegt eine Tabelle mit 228 Zeilen und einer Spalte vor. Ich möchte nun für jede Zeile dieser Tabelle eine Matrix erstellen und für diese bestimmte Werte berechnen.
Das Auslesen klappt, ich verwende daten <- read.csv(Pfad, header= FALSE, sep="");
Die Matrix möchte ich mit W <- matrix(c(a), nrow = 3, ncol = 3, byrow = TRUE); erzeugen.
Mein Problem liegt denke ich in dem Auslesen der Tabellenzeilen. Wenn ich z.B. a <- daten[4,] verwende und ausgebe kommt folgendes raus und wird dann wohl aus so übernommen (also alles, und nicht nur "0,0,1,0,1,1,0,0,0" (das, was ich eigentlich brauche)
[1] 0,0,1,0,1,1,0,0,0
228 Levels: 0,0,0,1,0,1,0,0,0 0,0,0,1,1,1,0,0,0 0,0,1,0,0,1,0,0,0 0,0,1,0,1,1,0,0,0 0,0,1,1,0,0,0,0,0 ... 1,1,1,1,1,1,1,1,1
Gibt es noch eine andere, geeignetere Möglichkeiten des Auslesens von Tabellen? Oder muss ich noch eine Weiterbearbeitung vornehmen?
Vielen Dank vorab,
Hanna
Mit liegt eine Tabelle mit 228 Zeilen und einer Spalte vor. Ich möchte nun für jede Zeile dieser Tabelle eine Matrix erstellen und für diese bestimmte Werte berechnen.
Das Auslesen klappt, ich verwende daten <- read.csv(Pfad, header= FALSE, sep="");
Die Matrix möchte ich mit W <- matrix(c(a), nrow = 3, ncol = 3, byrow = TRUE); erzeugen.
Mein Problem liegt denke ich in dem Auslesen der Tabellenzeilen. Wenn ich z.B. a <- daten[4,] verwende und ausgebe kommt folgendes raus und wird dann wohl aus so übernommen (also alles, und nicht nur "0,0,1,0,1,1,0,0,0" (das, was ich eigentlich brauche)
[1] 0,0,1,0,1,1,0,0,0
228 Levels: 0,0,0,1,0,1,0,0,0 0,0,0,1,1,1,0,0,0 0,0,1,0,0,1,0,0,0 0,0,1,0,1,1,0,0,0 0,0,1,1,0,0,0,0,0 ... 1,1,1,1,1,1,1,1,1
Gibt es noch eine andere, geeignetere Möglichkeiten des Auslesens von Tabellen? Oder muss ich noch eine Weiterbearbeitung vornehmen?
Vielen Dank vorab,
Hanna
Re: Matrix aus Tabellenzeile erstellen
Ich tippe auf einen Fehler beim einlesen (immer mit?str() prüfen!). Vermutlich mõchtest du sep=","...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Matrix aus Tabellenzeile erstellen
Danke für die schnelle Rückmeldung. Um meine Matrix zu befüllen hätte ich gerne Strings in der Form "0,0,1,0,0,1,0,0,0" . So stehen sie auch in der Tabelle.
str(a) ergibt:
Factor w/ 228 levels "0,0,0,1,0,1,0,0,0",..: 4
str(a) ergibt:
Factor w/ 228 levels "0,0,0,1,0,1,0,0,0",..: 4
Re: Matrix aus Tabellenzeile erstellen
Ich muss gestehen, dass ich das Problem nicht so recht verstehe. Ich habe mich deshalb an einem Beispiel versucht und das funktioniert, denke ich, so wie du es möchtest. Du müsstest deine Daten als character mit as.character() definieren bzw. entsprechend auslesen( colClasses = "character").
Code: Alles auswählen
# eine Zeile mit der Struktur des Datensatzes erzeugen
test <- c(sample(c("0,", "1,"), 227, replace = TRUE), sample(c("0", "1"), 1))
test <- paste0(test)
test <- noquote(test)
tail(test)
str(test)
# eine Matrix erstellen
test_matrix <- matrix(c(test), nrow = 3, ncol = 3, byrow = TRUE)
head(test_matrix)
str(test_matrix)
# Output
head(test_matrix)
[,1] [,2] [,3]
[1,] "0," "0," "1,"
[2,] "1," "1," "1,"
[3,] "1," "0," "0,"
Re: Matrix aus Tabellenzeile erstellen
Danke, aber hier wird ja - wenn ich es richtig sehe - nichts mehr aus meiner Tabelle ausgelesen.
Ich versuche es nochmal zu beschreiben.
In meiner Tabelle (csv) sind 228 Zeilen mit "Zahlencodes" (bestehend aus verschiedenen Kombinationen von 0 und 1, jeweils in Summe 9 Stück, getrennt durch ein Komma), die ich jeweils in eine 3x3-Matrix umwandeln möchte.
Meine Überlegung ist, dass ich Zeile für Zeile auslese, sie in die Matrix packe, analysiere und mir die Werte ausgeben (in einer Schleife im Programm).
Nur habe ich Probleme beim Auslesen, da kommt halt immer "mehr mit", als nur die Zeile (ich möchte gerne "0,0,1,0,1,1,0,0,0" haben, das ist genau der Inhalt einer Zelle).
(x ist mein Zählvariable in der Schleife)
b <- daten[x,];
W <- matrix(c(b), nrow = 3, ncol = 3, byrow = TRUE);
Ich versuche es nochmal zu beschreiben.
In meiner Tabelle (csv) sind 228 Zeilen mit "Zahlencodes" (bestehend aus verschiedenen Kombinationen von 0 und 1, jeweils in Summe 9 Stück, getrennt durch ein Komma), die ich jeweils in eine 3x3-Matrix umwandeln möchte.
Meine Überlegung ist, dass ich Zeile für Zeile auslese, sie in die Matrix packe, analysiere und mir die Werte ausgeben (in einer Schleife im Programm).
Nur habe ich Probleme beim Auslesen, da kommt halt immer "mehr mit", als nur die Zeile (ich möchte gerne "0,0,1,0,1,1,0,0,0" haben, das ist genau der Inhalt einer Zelle).
(x ist mein Zählvariable in der Schleife)
b <- daten[x,];
W <- matrix(c(b), nrow = 3, ncol = 3, byrow = TRUE);
Re: Matrix aus Tabellenzeile erstellen
Hallo Hanna,
es ist schwer nachvollziehbar, warum Du solche Zeilen als String einlesen möchtest, um dann den String zu zerlegen, in Zahlen umzuwandeln und daraus dann Matrizen zu machen. Es ist doch viel simpler, wenn Du das Zerlegen nach Kommas gleich von read.csv erledigen lässt. Dazu musst Du wahrscheinlich nur das sep="" weglassen und erhälst einen schönen Dataframe mit 228 Zeilen und 9 Spalten. Die Spalten lassen sich dann viel einfacher in eine Matrix umwandeln.
Ein Denkanstoß dazu:
LG,
Bernhard
es ist schwer nachvollziehbar, warum Du solche Zeilen als String einlesen möchtest, um dann den String zu zerlegen, in Zahlen umzuwandeln und daraus dann Matrizen zu machen. Es ist doch viel simpler, wenn Du das Zerlegen nach Kommas gleich von read.csv erledigen lässt. Dazu musst Du wahrscheinlich nur das sep="" weglassen und erhälst einen schönen Dataframe mit 228 Zeilen und 9 Spalten. Die Spalten lassen sich dann viel einfacher in eine Matrix umwandeln.
Ein Denkanstoß dazu:
Code: Alles auswählen
bsp <- read.table(sep=",", text= "0,1,1,0
1,1,1,1
0,0,0,0")
matrizen <- lapply(1:nrow(bsp), function(zeile) print(matrix(bsp[zeile,], nrow=2)))
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: Matrix aus Tabellenzeile erstellen
oder
Aber auch ich bin der Meinung, dass das Problem gleich beim Einlesen angepackt werden kann.
Sollte trotzdem
dann kann man auch dies gut beheben mit
und ansonsten noch:
Willkommen im Forum, Hanna!
Gruß, Jörg
Code: Alles auswählen
bsp <- read.table(sep=",", text=
"0,1,1,0
1,1,1,1
0,0,0,0")
lapply(split(bsp, 1:nrow(bsp)), matrix, nrow=2)
Sollte trotzdem
Code: Alles auswählen
daten <- data.frame(x=c("0,1,1,0", "1,1,1,1", "0,0,0,0"))
Code: Alles auswählen
read.table(text=as.character(daten$x), sep=",")
Willkommen im Forum, Hanna!
Gruß, Jörg
Re: Matrix aus Tabellenzeile erstellen
Danke (auch für die Begrüßung im Forum).
Ich bin nicht nur neu hier, sondern auch in R - vermutlich denke ich daher auch in eine andere Richtung... sorry dafür.
ich habe mir meine CSV ja schon so vorbereitet, dass da die Strings drinstehen, die ich für die weitere Verarbeitung brauche. Ich kann die leider nicht frei erstellen lassen. Jede Zeile soll in eine matrix umgewandelt werden, auf die ich ihm nächste Schritt Auswertungen der sozialen Netzwerkanalyse rüberlaufen lasse.
Ich brauche also wirklich für jede csv-Zeile eine Matrix.
Ergänzung: eben hat das mal geklappt, wenn ich meine Funktion schrittweise ausgeführt habe.... kann es leider noch nicht reproduzieren.
Grüße Hanna
Ich bin nicht nur neu hier, sondern auch in R - vermutlich denke ich daher auch in eine andere Richtung... sorry dafür.
ich habe mir meine CSV ja schon so vorbereitet, dass da die Strings drinstehen, die ich für die weitere Verarbeitung brauche. Ich kann die leider nicht frei erstellen lassen. Jede Zeile soll in eine matrix umgewandelt werden, auf die ich ihm nächste Schritt Auswertungen der sozialen Netzwerkanalyse rüberlaufen lasse.
Ich brauche also wirklich für jede csv-Zeile eine Matrix.
Ergänzung: eben hat das mal geklappt, wenn ich meine Funktion schrittweise ausgeführt habe.... kann es leider noch nicht reproduzieren.
Grüße Hanna
Re: Matrix aus Tabellenzeile erstellen
Hallo Hanna,
Gruß, Jörg
deshalb wäre es gut, wenn Du uns die CSV-Datei (oder eine strukturell gleiche, falls Du keine echten Daten zeigen kannst) zur Verfügung stellen könntest.Hanna hat geschrieben: ↑Do Feb 21, 2019 11:31 am ich habe mir meine CSV ja schon so vorbereitet, dass da die Strings drinstehen, die ich für die weitere Verarbeitung brauche. Ich kann die leider nicht frei erstellen lassen. Jede Zeile soll in eine matrix umgewandelt werden, auf die ich ihm nächste Schritt Auswertungen der sozialen Netzwerkanalyse rüberlaufen lasse.
Ich brauche also wirklich für jede csv-Zeile eine Matrix.
Ergänzung: eben hat das mal geklappt, wenn ich meine Funktion schrittweise ausgeführt habe.... kann es leider noch nicht reproduzieren.
Gruß, Jörg
Re: Matrix aus Tabellenzeile erstellen
Code: Alles auswählen
meineFunkion <- function(){
n <- 2;
daten <- read.csv("Dateiname", header= FALSE, sep="");
for(i in 0:n){
print(i);
zeile <- daten[i,];
W <- matrix(c(zeile), nrow = 3, ncol = 3, byrow = TRUE);
print(W);
i <- i+1;
}
}