Ich habe den folgenden Code:R double for loop: außen oder anwenden?
a <- c(1,2,2,3,4,5,6)
b <- c(4,5,6,7,8,8,9)
data <- data.frame(cbind(a,b))
trial <- copy(data)
for (j in 1: ncol(trial)) {
for (i in 2: nrow(trial)) {
if (trial[i,j] == trial[i-1,j] & !is.na(trial[i,j]) & !is.na(trial[i-1,j])) {
trial[i,j] <- trial[i-1,j] + (0.001*sd(trial[,j], na.rm = T))
}
}
}
Der Code funktioniert perfekt, aber in einem größeren Datenmenge ist ein bisschen langsam. Ich dachte, die Geschwindigkeit zu verbessern, indem Sie entweder die Anwendung oder die äußere Familie verwenden. Die Themen sind:
- Ich weiß, wie eine einzelne Schleife angewandt werden soll gelten, aber nicht für 2, besonders in diesem Fall, wo ich einzelne Werte nach fallspezifischen Bedingungen, mit einem anderen einzelnen Wert ersetzen muß (die Verzögerung) sowie ein Multiplikator der Standardabweichung (das etwas, was ich über die gesamte Spalte berechnen müssen, ist,
- Außer this solved question, habe ich keine Erfahrung auf allen mit äußeren und vektorisiert Funktionen anstelle von Schleifen
Versuchen 'Bibliothek (data.table); f <- function (x) ifelse (x == Verschiebung (x), x + 0,001 * sd (x, na.rm = WAHR), x); setDT (Daten) [, lapply (.SD, f),] ' – Khashaa
@Khashaa kannst du mir ein bisschen von dir Lösung erklären? Ich bin ein Neuling .. die Funktion ist klar, was ist mit dem Rest? [..] und die .SD – Mino
Sie können über data.table hier lernen https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-intro.html – Khashaa