2016-07-03 123 views
0

我試圖根據對照組的(dx = 1)均值和標準差創建z-評分變量。我想循環所有我感興趣的變量(PCT:CST.L)來創建這些z分數。我將如何做到這一點?這是我的數據。在R循環中創建變量

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 

而且在這裏,我希望它看起來像(至少是標題,至少)。

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 

數據

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')] < - scale(dd [,c(「PCT」,「 CST.R「,」CST.L「)])' – rawr

+0

[related](http://stackoverflow.com/questions/6148050/creating-z-scores)我沒有讀得很好。你想通過控制和臨牀組獲得zscores?我不知道'dx = 1'的意思和sd是什麼意思 - 沒有一個單一的觀測sd – rawr

回答

0

我會假設你要計算Z值的每一列。

Z分數計算爲(X - mean)/Standard deviationX這裏將是選定列中的每一行。

> 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

這絕對是正確的方向,但是當我玩這個功能時,我的新列都說NA。任何想法爲什麼發生這種情況? – anniea

+0

我想通了!謝謝!! – anniea

+0

可能有些類型/類不一致...很高興幫助你 – shawnl