Matrix aus Tabellenzeile erstellen

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

Moderatoren: EDi, jogo

Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von EDi »

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
Bild.
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

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
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hufeisen »

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,"
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

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

Re: Matrix aus Tabellenzeile erstellen

Beitrag von bigben »

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:

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)))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

oder

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)
Aber auch ich bin der Meinung, dass das Problem gleich beim Einlesen angepackt werden kann.
Sollte trotzdem

Code: Alles auswählen

daten <- data.frame(x=c("0,1,1,0", "1,1,1,1", "0,0,0,0"))
dann kann man auch dies gut beheben mit

Code: Alles auswählen

read.table(text=as.character(daten$x), sep=",")
und ansonsten noch:
Willkommen im Forum, Hanna!

Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

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

Re: Matrix aus Tabellenzeile erstellen

Beitrag von jogo »

Hallo Hanna,
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.
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.

Gruß, Jörg
Hanna
Beiträge: 24
Registriert: Mi Feb 20, 2019 5:00 pm

Re: Matrix aus Tabellenzeile erstellen

Beitrag von Hanna »

testDaten.csv
(112 Bytes) 153-mal heruntergeladen

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;
  }
}
Antworten