2017-07-07 1 views
1

Ich habe zwei 18-mal-48-Datensätze. Einer für die Verstorbenen und der andere für den Überlebenden. Beide haben die gleichen Spaltennamen (CNP1, CNP2, ..., CNP48). Ich möchte den P-Wert jedes CNP berechnen. Die Funktion, die ich verwende ist die folgende:Wie berechnet man p-Wert für 48 Spalten und speichert die Ergebnisse

t.test (died_CNP $ CNP1, survived_CNP $ CNP1) [3] - Wie kann ich diese Funktion für die auf einen Schlag 48 Spalten verwenden und die sparen führt zu Variablen (p1, p2, ..., p48)?

Antwort

1

Sie können einfach die Spalten überlappen. Die

pVals <- numeric() 
for(i in 1:ncol(died_CNP)) 
    pVals[i] <- t.test(died_CNP[,i],survived_CNP[,i])$p.value 

resultierende pVals wird ein numerischer Vektor der Länge 48. Es wird empfohlen, p-Werte anzupassen p.adjust mit dem multiple comparisons problem

pValsAdjusted <- p.adjust(pVals) 
1

Dies ist zu lang für einen Kommentar zu vermeiden, sondern erstreckt sich Gregors Antwort. Der Hauptunterschied ist, dass es die for Schleife erstellt, ohne das Objekt zu vergrößern.

pVals <- vector ("numeric", length = ncol (died_CNP)) 
for (i in seq_along (pVals)){ 
    pVals[i] <- t.test(died_CNP[[i]], survived_CNP[[i]])$p.value 
} 

Oder Sie können vektorisiert es

pVals <- vapply (seq_along (died_CNP), 
      function (i){ 
      t.test(died_CNP[,i],survived_CNP[,i])$p.value 
      }, 
      numeric(1)) 

(typisierten auf einem Telefon, Code ungetestet)

Verwandte Themen