2016-04-29 7 views
0

Ich muss eine Schleife, die t-tests auf kleine Gruppen eines Datenrahmens ausführen wird. Ich denke, dass sie eine for loop empfohlen haben. Im Datenrahmen befinden sich 271 Zeilen. Die ersten 260 Zeilen müssen in 13 Gruppen von 20 aufgeteilt werden, und eine t-test muss für jede der 13 Gruppen ausgeführt werden.Laufende Schleife auf Gruppen von Datenrahmen in R

Dies ist der Code, den ich verwendet, um eine t-test auf den gesamten Datenrahmen auszuführen:

t.test(a, c, alternative =c("two.sided"), mu=0, paired=TRUE, var.equal=TRUE, conf.level=0.95) 

Ich bin eine Codierung noob, bitte helfen! D:

Antwort

1

Zuerst sehe ich hier keinen data.frame. a und c scheinen Vektoren zu sein. Ich nehme an, dass diese beiden Vektoren die Länge 271 haben und Sie die letzten 11 Elemente ignorieren wollen. So können Sie zuerst diese Elemente wegzuwerfen:

a2 <- a[1:260] 
c2 <- c[1:260] 

Jetzt können Sie einen Vektor der Länge 260 die Indizes der Untergruppen erstellen zu bestimmen. (Es gibt viele Möglichkeiten, dies zu tun, aber ich denke, auf diese Weise leicht zu verstehen ist.)

indices <- as.numeric(cut(1:260, 20)) 
indices #just to show the output 

Sie müssen wahrscheinlich die Ausgabe in einer Liste speichern. Der folgende Code ist wiederum nicht der effizienteste, aber leicht zu verstehen.

result <- list() 
for (i in 1:20){ 
    result[[i]] <- t.test(a2[which(indices == i)], c2[which(indices == i)], 
         alternative = c("two.sided"), 
         mu = 0, paired = TRUE, var.equal = TRUE, 
         conf.level = 0.95) 
} 
result[[1]] #gives the results of the first t-test (items 1 to 20) 
result[[2]] # ... 

Als Alternative zum for -loop Sie auch lapply verwenden könnte, die in der Regel effektiver und ein bisschen kürzer ist (aber das für 260 Datenpunkte spielt keine Rolle):

result2 <- lapply(1:20, function(i) t.test(a2[which(indices == i)], 
              c2[which(indices == i)], 
              alternative = c("two.sided"), 
              mu = 0, paired = TRUE, var.equal = TRUE, 
              conf.level = 0.95)) 
result[[1]] # ... 

Ich hoffe, Das beantwortet deine Frage.

+0

Hey Entschuldigung, ich dachte, der Datenrahmen war zu groß und unordentlich. A und C Spalten in dem Datenrahmen Vielen Dank für Ihre Hilfe darstellen! – Emilia

Verwandte Themen