2016-07-03 15 views
0

Ich versuche z-score-Variablen basierend auf dem Mittelwert und der Standardabweichung der Kontrollgruppe (dx = 1) zu erstellen. Ich würde gerne alle meine Variablen von Interesse (PCT: CST.L) durchlaufen, um diese Z-Scores zu erstellen. Wie würde ich das tun? Hier sind meine Daten.Erstellen von Variablen in R-Schleife

X dx PCT CST.R CST.L 
1 1 Control 15 30  5 
2 2 Control 20 24  22 
3 3 Clinical 25 20  14 
4 4 Control 17 13  12 
5 5 Clinical 14 12  11 
6 6 Control 13 20  15 

Und auch hier, wie ich es gerne aussehen würde (na ja, die Header, zumindest).

X dx PCT CST.R CST.L PCT_Z CST.R_Z CST.L_Z 
1 1 Control 15 30  5 
2 2 Control 20 24  22 
3 3 Clinical 25 20  14 
4 4 Control 17 13  12 
5 5 Clinical 14 12  11 
6 6 Control 13 20  15 

Daten

structure(list(X = 1:6, dx = c("Control", "Control", "Clinical", 
"Control", "Clinical", "Control"), PCT = c(15L, 20L, 25L, 17L, 
14L, 13L), CST.R = c(30L, 24L, 20L, 13L, 12L, 20L), CST.L = c(5L, 
22L, 14L, 12L, 11L, 15L)), .Names = c("X", "dx", "PCT", "CST.R", 
"CST.L"), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6")) 
+0

'dd [, paste0 (c ("PCT", "CST.R", "CST.L"), '_Z')] <- Skala (dd [c ("PCT",“ CST.R "," CST.L ")])' – rawr

+0

[verwandt] (http://stackoverflow.com/questions/6148050/creating-z-scores) Ich habe nicht sehr gut gelesen. Sie möchten die Zscore von Kontroll- und klinischen Gruppen bekommen? Ich weiß nicht, was du meinst mit 'dx = 1's Mittelwert und sd - es gibt keine SD für eine einzige Beobachtung – rawr

Antwort

0

Ich werde Sie übernehmen wollen Z-Score für jede Spalte berechnen.

Z-Score wird als (X - mean)/Standard deviation berechnet. X Hier wird jede Zeile in der ausgewählten Spalte sein.

> df = data.frame(X = 1:6, 
+   dx = c("Control", "Control", "Clinical", "Control", "Clinical", "Control"), 
+   PCT = c(15L, 20L, 25L, 17L, 14L, 13L), 
+   CST.R = c(30L, 24L, 20L, 13L, 12L, 20L), 
+   CST.L = c(5L, 22L, 14L, 12L, 11L, 15L)) 
> df 
    X  dx PCT CST.R CST.L 
1 1 Control 15 30  5 
2 2 Control 20 24 22 
3 3 Clinical 25 20 14 
4 4 Control 17 13 12 
5 5 Clinical 14 12 11 
6 6 Control 13 20 15 
> 
> colsToCalculate = colnames(df[, 3:5]) 
> newCols = c('PCT_Z', 'CST.R_Z', 'CST.L_Z') 
> 
> for (i in seq(newCols)) { 
+ data = df[, colsToCalculate[i]] 
+ df[, newCols[i]] = (data - mean(data))/sd(data) 
+ } 
> 
> df 
    X  dx PCT CST.R CST.L  PCT_Z  CST.R_Z CST.L_Z 
1 1 Control 15 30  5 -0.51830527 1.50280954 -1.4675659 
2 2 Control 20 24 22 0.59234888 0.61590555 1.5873672 
3 3 Clinical 25 20 14 1.70300302 0.02463622 0.1497516 
4 4 Control 17 13 12 -0.07404361 -1.01008510 -0.2096523 
5 5 Clinical 14 12 11 -0.74043610 -1.15790243 -0.3893542 
6 6 Control 13 20 15 -0.96256693 0.02463622 0.3294536 
> 
+0

Dies ist definitiv die richtige Richtung, aber wenn ich diese Funktion Spaß meine meine neuen Spalten alle NA. Irgendeine Idee, warum das passiert? – anniea

+0

Ich habe es herausgefunden !! Vielen Dank!! – anniea

+0

Wahrscheinlich eine Art/Klasseninkonsistenz ... Ich bin froh, Ihnen helfen zu können – shawnl

Verwandte Themen