Daten in Matrix umstrukturieren

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

Moderatoren: EDi, jogo

Antworten
eimichae
Beiträge: 36
Registriert: Mo Okt 10, 2016 8:48 pm

Daten in Matrix umstrukturieren

Beitrag von eimichae »

Hallo zusammen für eine Analyse (PLS-DA) müsste ich mein Datenset in die Form einer daten Matrix bringen so wie im Beispieldatensatz "sacurine"

Code: Alles auswählen

data(sacurine)
dataMatrix
str(dataMatrix)
Hier werden die Wert "HU_011..." als Individuen/Samples gewertet in denen unterschiedlich Stoffe gemessen wurden (Acetaminophen etc.)
example.PNG
example.PNG (10.76 KiB) 1095 mal betrachtet
Ich bräuchte für meine Analysen die selbe Datenstruktur
Anstelle von "HU_011...." heissen meine Samples "sa1...." in jedem Sample wurden die Compounds 1-5 gemessen.

Wenn ich meinen Datensatz aber einlese und zu einer Matrix umformatiere will sieht mein Datensatz so aus:
ex2.PNG
ex2.PNG (8.66 KiB) 1095 mal betrachtet
Die Samples "sa1..." werden als Datenpunkte gewertet und nicht als "sample" dem Comp 1-5 zugeordnet werden soll


Kann mir jemand zeigen wie ich meine Daten so umstrukturieren kann, dass sie in die Form wie im "sacurine" Beispiel gelangen?

Danke


MEIN DATENSATZ:

Code: Alles auswählen

> dput(dta)
structure(list(Sample = structure(c(1L, 12L, 23L, 34L, 36L, 37L, 
38L, 39L, 40L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 24L, 25L, 26L, 27L, 
28L, 29L, 30L, 31L, 32L, 33L, 35L), .Label = c("sa1", "sa10", 
"sa11", "sa12", "sa13", "sa14", "sa15", "sa16", "sa17", "sa18", 
"sa19", "sa2", "sa20", "sa21", "sa22", "sa23", "sa24", "sa25", 
"sa26", "sa27", "sa28", "sa29", "sa3", "sa30", "sa31", "sa32", 
"sa33", "sa34", "sa35", "sa36", "sa37", "sa38", "sa39", "sa4", 
"sa40", "sa5", "sa6", "sa7", "sa8", "sa9"), class = "factor"), 
    Comp1 = c(1.7686, 0.6873, 1.2322, 1.4874, 1.8986, 1.3484, 
    1.0959, 0.583, 1.039, 1.6133, 0.9595, 1.6377, 1.4538, 0.8737, 
    1.3363, 1.7881, 2.3604, 1.1239, 2.1281, 2.037, 0.5314, 0.7147, 
    0.5917, 0.6671, 0.6645, 0.9865, 1.019, 0.9664, 0.6966, 0.679, 
    0.7976, 0.8503, 1.2566, 0.5881, 0.8838, 0.6657, 0.7399, 0.5778, 
    0.7121, 1.1909), Comp2 = c(0.0284, 0.9064, 0, 0.7053, 0.7695, 
    0.337, 1.0418, 0.8346, 0.3884, 1.9946, 1.3296, 0.119, 0.0106, 
    0.7872, 1.0174, 0.0704, 0.0854, 0.4259, 0.0395, 0.0549, 2.4471, 
    1.8418, 2.9805, 1.1181, 0.5403, 2.7181, 1.4835, 0.875, 2.2205, 
    2.4106, 1.1967, 0.303, 0.1129, 2.5432, 2.328, 0.9839, 2.3583, 
    1.9589, 1.9918, 1.2232), Comp3 = c(2.9976, 1.6201, 0.7497, 
    1.371, 2.7035, 0.4533, 0.9927, 1.0973, 1.6702, 1.3696, 0.3392, 
    1.1489, 2.1086, 1.1586, 1.3645, 1.6008, 2.9567, 1.5721, 2.9633, 
    2.4623, 0.1103, 0.3137, 0.313, 0.2969, 0.5148, 0.7419, 0.5641, 
    0.7871, 0.7362, 0.8754, 0.4883, 0.8504, 1.4582, 0.1934, 0.764, 
    0.7515, 0.7143, 0.2139, 0.5743, 1.7305), Comp4 = c(0, 0, 
    0.603, 0, 1.6524, 0, 0, 0, 0, 1.1056, 0, 0, 0, 0, 0, 0, 5.7848, 
    0, 0, 0, 0, 0, 0, 0, 0, 0.7895, 3.4641, 0, 0, 1.7446, 0, 
    0, 1.5165, 0, 5.9645, 4.1878, 0.7313, 5.7994, 3.0168, 0), 
    Comp5 = c(18.6058, 5.6489, 12.0842, 4.2708, 3.8489, 10.2139, 
    6.1149, 11.3373, 8.9013, 5.8342, 18.532, 17.9267, 8.7386, 
    6.9455, 7.3044, 19.0811, 10.8809, 10.7149, 4.7057, 0, 10.3088, 
    5.1514, 19.1218, 21.1768, 8.3797, 2.7146, 8.7405, 14.4817, 
    8.6571, 17.4254, 17.5725, 5.1233, 13.7539, 6.7396, 2.1342, 
    14.4216, 9.2952, 19.9525, 2.2317, 16.501), Gender = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("AP", "C"
    ), class = "factor")), .Names = c("Sample", "Comp1", "Comp2", 
"Comp3", "Comp4", "Comp5", "Gender"), class = "data.frame", row.names = c(NA, 
-40L))
MEIN CODE:

Code: Alles auswählen

#read in data & convert to matrix
dta<-read.csv("Demo.csv",sep=";",header=T)
dta

#convert to data matrix and remove "Gender" (PROBLEM: Matrix convertion)
dta.explanatory<-dta[,-7]

matrix.ex<-as.matrix(dta.explanatory)
matrix.ex
str(matrix.ex)
Zuletzt geändert von jogo am Fr Sep 15, 2017 8:57 am, insgesamt 1-mal geändert.
Grund: Code/Output formatiert
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten in Matrix umstrukturieren

Beitrag von jogo »

Hallo eimichae,

kennst Du den Unterschied zwischen einer Matrix und einem Dataframe?
Dein Beispieldatensatz sacurine z.B. ist ein Dataframe.

Möchtest Du:

Code: Alles auswählen

dta <- ... # Einlesen (... ich habe die Daten per dta <- structure(...) rekonstruiert)
rownames(dta) <- dta$Sample
, um anschließend auf die erste Spalte zu verzichten?
Du hast aber immer noch eine Spalte mit einem Faktor in Deinem Dataframe. Was soll mit dem Faktor geschehen?

Gruß, Jörg
eimichae
Beiträge: 36
Registriert: Mo Okt 10, 2016 8:48 pm

Re: Daten in Matrix umstrukturieren

Beitrag von eimichae »

Hallo Jörg,

Danke für deine Antwort und für die Aufklärung dass es sich um ein Dataframe handelt.

Super genau das wollte ich. Dass die 1 erste Spalte ( [1,], [2,]...) durch sa1, sa2 etc ersetzt wird.

Ich nehme an, dass R nun erkennt dass alle compounds (Comp1, Comp2..) der ersten Reihe von sample sa1 stammen, alle der zweiten Reihe von sa2 usw. Stimmt das?

In diesem Fall bräuchte ich die zusätzliche Spalte (Spalte2) in denen sie Samples nochmals gelistet sind nicht. Ich würde sie daher aus dem Dataframe löschen (zusammen mit Spalte 7)

Code: Alles auswählen

dta
rownames(dta) <- dta$Sample
dat_2<-dta[,c(-1,-7)]

Was meinst du?

Gruss,
Michi
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten in Matrix umstrukturieren

Beitrag von jogo »

Hallo Michi,
eimichae hat geschrieben: Fr Sep 15, 2017 12:49 pmSuper genau das wollte ich. Dass die 1 erste Spalte ( [1,], [2,]...) durch sa1, sa2 etc ersetzt wird.
Die eckigen Klammern in [1,] sind genau das Kennzeichen für eine Matrix.
Ich nehme an, dass R nun erkennt dass alle compounds (Comp1, Comp2..) der ersten Reihe von sample sa1 stammen, alle der zweiten Reihe von sa2 usw. Stimmt das?
in gewisser Art und Weise war das auch schon vorher so, sofern man sich irgendwie die Spalte Sample irgendwo konserviert. Was jetzt (nach rownames(dta) <- dta$Sample) natürlich möglich ist:
Du kannst die Zeilen mit ihrem Namen ansprechen:

Code: Alles auswählen

dta["sa7",]
In diesem Fall bräuchte ich die zusätzliche Spalte (Spalte2) in denen sie Samples nochmals gelistet sind nicht. Ich würde sie daher aus dem Dataframe löschen (zusammen mit Spalte 7)

Code: Alles auswählen

dta
rownames(dta) <- dta$Sample
dat_2<-dta[,c(-1,-7)]
Was meinst du?
Für das Löschen der Spalten (bzw. Nichtübernahme in einen neuen Dataframe) gibt es verschiedenen Möglichkeiten:

Code: Alles auswählen

dta[, 2:6]
dta[, -c(1,7)]
dta[, paste0("Comp", 1:5)]
Welche dieser Varianten für Dich die beste ist, kann ich nicht entscheiden. Grob besehen erledigen sie alle das gleiche, aber trotzdem gibt es kleine feine Unterschiede (z.B. wenn die Spalten mal in einer anderen Reihenfolge in einem Dataframe sind).
Auch, ob das Entfernen dieser Spalten überhaupt notwendig ist, lässt sich nur mit Blick auf die Funktionen beurteilen, die Du auf diesen Dataframe anwenden möchtest.

Gruß, Jörg
Antworten