Erstellung eines Loops zur Übertragung von Daten
Moderator: EDi
Erstellung eines Loops zur Übertragung von Daten
Hallo,
ich arbeite derzeit mit R, wobei es um die multivariate Statistik bei NIR-Untersuchungen geht.
Die NIR-Daten nehme ich aus einer SQLite-Datenbank, in der z.B. 200 Proben und die NIR-Daten dieser 200 Proben enthalten sind. Die NIR-Daten aller Proben stehen in SQLite jedoch alle nebeneinander, durch Kommas getrennt, in einer Zeile (und nicht pro Wellenlänge eine Spalte). Daher habe ich zunächst den String auseinander genommen, um im Anschluss ein data.frame df zu erstellen, in das die NIR-Daten eingetragen werden sollen.
Hier kommt meine Frage: Bisher habe ich es nur geschafft, die NIR-Daten jeder Probe einzeln nacheinander mit dem folgenden Befehl in das data.frame df aufzunehmen:
for (i in 1:180) {df[1,i] <- sp }
Bei 200 Proben ist das aber ziemlich umständlich, die NIR-Daten aller Proben einzeln nacheinander in das Data.frame aufzunehmen. Gibt es die Möglichkeit, für alle 200 Proben alle NIR-Daten mit einem Klick in das data.frame aufzunehmen? Irgendwie mit einem Loop?
Vielen Dank für Eure Hilfe vorab!!
Viele Grüße,
studentin_09
ich arbeite derzeit mit R, wobei es um die multivariate Statistik bei NIR-Untersuchungen geht.
Die NIR-Daten nehme ich aus einer SQLite-Datenbank, in der z.B. 200 Proben und die NIR-Daten dieser 200 Proben enthalten sind. Die NIR-Daten aller Proben stehen in SQLite jedoch alle nebeneinander, durch Kommas getrennt, in einer Zeile (und nicht pro Wellenlänge eine Spalte). Daher habe ich zunächst den String auseinander genommen, um im Anschluss ein data.frame df zu erstellen, in das die NIR-Daten eingetragen werden sollen.
Hier kommt meine Frage: Bisher habe ich es nur geschafft, die NIR-Daten jeder Probe einzeln nacheinander mit dem folgenden Befehl in das data.frame df aufzunehmen:
for (i in 1:180) {df[1,i] <- sp }
Bei 200 Proben ist das aber ziemlich umständlich, die NIR-Daten aller Proben einzeln nacheinander in das Data.frame aufzunehmen. Gibt es die Möglichkeit, für alle 200 Proben alle NIR-Daten mit einem Klick in das data.frame aufzunehmen? Irgendwie mit einem Loop?
Vielen Dank für Eure Hilfe vorab!!
Viele Grüße,
studentin_09
Zuletzt geändert von studentin_09 am Fr Jan 20, 2017 10:26 am, insgesamt 1-mal geändert.
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Like this?
Code: Alles auswählen
sp <- 1:10
data.frame(t(sp))
## X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
## 1 1 2 3 4 5 6 7 8 9 10
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: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Hey EDi,
nein, leider meinte ich das nicht.
Ich lade zunächst die RSQLite Bibliothek und verknüpfe diese mit R. Meine Daten nehme ich aus einer SQLite Datenbank. Nur in SQLite sind meine Proben so dargestellt, dass in einer Spalte die Probennummer steht und in der anderen Spalte z.B. 180 Absorptionswerte des NIR-Spektrums stehen. Daher muss ich die NIR-Werte erstmal in separate Spalten packen und den String auseinander packen. Zunächst lade ich die Daten von Probe 1. Danach lass ich mir für Probe 1 die NIR-Werte anzeigen:
Die 180 NIR-Daten von Probe 1 werden ausgelesen:
Das muss ich bisher für alle 200 Proben einzeln machen, was sehr zeitintensiv ist. Gibt es eine Möglichkeit, diese ganzen Schritte direkt für alle 200 Proben gleichzeitig zu machen?
Danke
nein, leider meinte ich das nicht.
Ich lade zunächst die RSQLite Bibliothek und verknüpfe diese mit R. Meine Daten nehme ich aus einer SQLite Datenbank. Nur in SQLite sind meine Proben so dargestellt, dass in einer Spalte die Probennummer steht und in der anderen Spalte z.B. 180 Absorptionswerte des NIR-Spektrums stehen. Daher muss ich die NIR-Werte erstmal in separate Spalten packen und den String auseinander packen. Zunächst lade ich die Daten von Probe 1. Danach lass ich mir für Probe 1 die NIR-Werte anzeigen:
Code: Alles auswählen
stg <- samples$value
Code: Alles auswählen
Probe1 <- split(stg,180)
Danke
Zuletzt geändert von studentin_09 am Fr Jan 20, 2017 10:28 am, insgesamt 4-mal geändert.
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Hallo studentin_09,
willkommen im Forum. Kannst Du uns das Ergebnis vonin Deiner nächsten Nachricht zukommen lassen? ... oder die Datei Pr_1_out.txt nach Ausführung von:
Gruß, Jörg
willkommen im Forum. Kannst Du uns das Ergebnis von
Code: Alles auswählen
dput(Pr_1)
Code: Alles auswählen
dput(Pr_1, file="Pr_1_out.txt")
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Hallo Jörg,
hier der Output:
Hilft das zur Lösung meines Problems?
hier der Output:
Code: Alles auswählen
structure(list(sampleID = 1L, value = "1.1383,1.1664,1.1603,1.1526,1.1478,1.1426,1.1230,1.1079,1.0813,1.0798,1.0765,1.0799,1.0645,1.1013,1.0524,1.0463,0.9950,0.9670,0.9149,0.8953,0.8511,0.8514,0.8113,0.7889,0.7516,0.7451,0.7242,0.7009,0.6841,0.6589,0.6412,0.6399,0.6148,0.6006,0.5719,0.5465,0.5511,0.5235,0.5466,0.5124,0.5122,0.5100,0.4788,0.4801,0.4723,0.4556,0.4529,0.4397,0.4386,0.4125,0.4267,0.4241,0.4174,0.4165,0.4096,0.4052,0.4031,0.3785,0.3812,0.3755,0.3813,0.3781,0.3739,0.3755,0.3700,0.3663,0.3578,0.3628,0.3598,0.3565,0.3571,0.3563,0.3598,0.3564,0.3575,0.3603,0.3600,0.3651,0.3644,0.3678,0.3758,0.3763,0.3756,0.3791,0.3799,0.3790,0.3758,0.3713,0.3664,0.3628,0.3587,0.3542,0.3524,0.3502,0.3482,0.3461,0.3458,0.3426,0.3343,0.3409,0.3488,0.3818,0.3589,0.3583,0.3762,0.3818,0.3870,0.3960,0.4023,0.4249,0.4514,0.4567,0.4756,0.5091,0.5263,0.5467,0.5623,0.5688,0.5719,0.5668,0.5674,0.5602,0.5546,0.5486,0.5415,0.5353,0.5308,0.5242,0.5205,0.5214,0.5116,0.5148,0.5114,0.5109,0.5068,0.5024,0.4986,0.4965,0.4938,0.4935,0.4763,0.4908,0.4928,0.4944,0.4956,0.5017,0.5051,0.5105,0.5133,0.5091,0.5231,0.5265,0.5308,0.5310,0.5283,0.5285,0.5223,0.5292,0.5309,0.5282,0.5268,0.5271,0.5225,0.5200,0.5176,0.5166,0.5163,0.5131,0.5104,0.5088,0.5064,0.5044,0.5039,0.5034,0.5027,0.0000",
type = "NIR"), .Names = c("sampleID", "value", "type"), row.names = c(NA,
-1L), class = "data.frame")
Zuletzt geändert von jogo am Di Jan 17, 2017 9:41 am, insgesamt 1-mal geändert.
Grund: Output formatiert
Grund: Output formatiert
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
ja, das hilft ungemein. Zumindest kann ich jetzt schon:studentin_09 hat geschrieben:Hallo Jörg,
hier der Output: ...
Hilft das zur Lösung meines Problems?
Code: Alles auswählen
Pr_1 <- structure(list(sampleID = 1L, value = "1.1383,1.1664,1.1603,1.1526,1.1478,1.1426,1.1230,1.1079,1.0813,1.0798,1.0765,1.0799,1.0645,1.1013,1.0524,1.0463,0.9950,0.9670,0.9149,0.8953,0.8511,0.8514,0.8113,0.7889,0.7516,0.7451,0.7242,0.7009,0.6841,0.6589,0.6412,0.6399,0.6148,0.6006,0.5719,0.5465,0.5511,0.5235,0.5466,0.5124,0.5122,0.5100,0.4788,0.4801,0.4723,0.4556,0.4529,0.4397,0.4386,0.4125,0.4267,0.4241,0.4174,0.4165,0.4096,0.4052,0.4031,0.3785,0.3812,0.3755,0.3813,0.3781,0.3739,0.3755,0.3700,0.3663,0.3578,0.3628,0.3598,0.3565,0.3571,0.3563,0.3598,0.3564,0.3575,0.3603,0.3600,0.3651,0.3644,0.3678,0.3758,0.3763,0.3756,0.3791,0.3799,0.3790,0.3758,0.3713,0.3664,0.3628,0.3587,0.3542,0.3524,0.3502,0.3482,0.3461,0.3458,0.3426,0.3343,0.3409,0.3488,0.3818,0.3589,0.3583,0.3762,0.3818,0.3870,0.3960,0.4023,0.4249,0.4514,0.4567,0.4756,0.5091,0.5263,0.5467,0.5623,0.5688,0.5719,0.5668,0.5674,0.5602,0.5546,0.5486,0.5415,0.5353,0.5308,0.5242,0.5205,0.5214,0.5116,0.5148,0.5114,0.5109,0.5068,0.5024,0.4986,0.4965,0.4938,0.4935,0.4763,0.4908,0.4928,0.4944,0.4956,0.5017,0.5051,0.5105,0.5133,0.5091,0.5231,0.5265,0.5308,0.5310,0.5283,0.5285,0.5223,0.5292,0.5309,0.5282,0.5268,0.5271,0.5225,0.5200,0.5176,0.5166,0.5163,0.5131,0.5104,0.5088,0.5064,0.5044,0.5039,0.5034,0.5027,0.0000",
type = "NIR"), .Names = c("sampleID", "value", "type"), row.names = c(NA,
-1L), class = "data.frame")
strsplit(Pr_1$value, ",", fixed = TRUE)
as.numeric(strsplit(Pr_1$value, ",", fixed = TRUE)[[1]])
Ist für jeden Wert von sampleid genau ein Datensatz vorhanden?
Sind immer jeweils die gleiche Anzahl von Absorptionswerten in eine Zeichenkette gepackt? (176 Stück, ist das richtig?)
noch eine Bitte:
lies demnächst, wie man Codestücke u.a. hier in den Forumsnachrichten formatiert: viewtopic.php?f=20&t=29
(Deine bisherigen Nachrichten habe ich bereits editiert.)
Gruß, Jörg
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Hallo studentin_09,
normalerweise würdest Du alle interessierenden Datensätze in einem Rutsch aus der SQLite-Datenbank holen. Ich behelfe mich derzeit so:um mehrere Datensätze zu erzeugen.
Dann geht:
Bei Dir könnte das dann so aussehen:
oder
Dann bekommt man erstmal eine Matrix.
Gruß, Jörg
normalerweise würdest Du alle interessierenden Datensätze in einem Rutsch aus der SQLite-Datenbank holen. Ich behelfe mich derzeit so:
Code: Alles auswählen
Pr_123 <- rbind(Pr_1, Pr_1, Pr_1)
Dann geht:
Code: Alles auswählen
S <- strsplit(Pr_123$value, ",", fixed = TRUE)
M <- matrix(unlist(S), ncol=176, byrow = TRUE)
m <- matrix(as.numeric(unlist(S)), ncol=176, byrow = TRUE) # oder nrow=length(S)
colnames(m) <- paste0("NIR.", 1:176) # 1:ncol(m)
neuDat <- cbind(Pr_123[, "sampleID", drop=FALSE], m)
Code: Alles auswählen
Pr <- dbGetQuery( con,'select * from tor' )
S <- strsplit(Pr$value, ",", fixed = TRUE)
neuDat <- cbind( Pr[, "sampleID", drop=FALSE],
matrix(as.numeric(unlist(S)), nrow=length(S), byrow = TRUE, dimnames = list(NULL, paste0("NIR.", seq(S[[1]]))))
)
Code: Alles auswählen
Pr <- dbGetQuery( con,'select * from tor' )
S <- strsplit(Pr$value, ",", fixed = TRUE)
neuDat <- matrix(as.numeric(unlist(S)), nrow=length(S), byrow = TRUE,
dimnames = list(Pr$sampleID, paste0("NIR.", seq(S[[1]]))))
Gruß, Jörg
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Hallo Jörg,
vielen Dank. Ich werde das mal versuchen!
Sorry wegen der Formatierung, war keine böse Absicht!
Viele Grüße
Studentin_09
vielen Dank. Ich werde das mal versuchen!
Sorry wegen der Formatierung, war keine böse Absicht!
Viele Grüße
Studentin_09
Zuletzt geändert von studentin_09 am Fr Jan 20, 2017 10:20 am, insgesamt 2-mal geändert.
Re: Hilfe bei der Erstellung eines Loops zur Übertragung von Daten in ein data.frame
Hallo Jörg,
danke für deine Hilfe! Es klappt super!
Viele Grüße
Studentin_09
danke für deine Hilfe! Es klappt super!
Viele Grüße
Studentin_09
Zuletzt geändert von studentin_09 am Fr Jan 20, 2017 10:19 am, insgesamt 1-mal geändert.