2017-09-25 82 views
1

如果我在數據框中對數值列進行縮放和居中(每列中的每個值除以各自的列SD,並且從每個值中減去各列的平均值)然後,我將其轉換爲原始值。R - 將縮放和居中的數據轉換爲原始值

在下面的簡單示例中,我看到每個列的平均值和SD存儲在使用居中應用'scale'後的對象d4中。

d1 <- as.data.frame(seq(1,20,1)) 
d2 <- as.data.frame(seq(0.11,0.3,0.01)) 
d3 <- cbind(d1,d2) 
names(d3) <- c("A","B") 
d4 <- scale(d3,center=TRUE) 
d4 

       A   B 
[1,] -1.60579308 -1.60579308 
[2,] -1.43676223 -1.43676223 
[3,] -1.26773138 -1.26773138 
[4,] -1.09870053 -1.09870053 
[5,] -0.92966968 -0.92966968 
[6,] -0.76063883 -0.76063883 
[7,] -0.59160798 -0.59160798 
[8,] -0.42257713 -0.42257713 
[9,] -0.25354628 -0.25354628 
[10,] -0.08451543 -0.08451543 
[11,] 0.08451543 0.08451543 
[12,] 0.25354628 0.25354628 
[13,] 0.42257713 0.42257713 
[14,] 0.59160798 0.59160798 
[15,] 0.76063883 0.76063883 
[16,] 0.92966968 0.92966968 
[17,] 1.09870053 1.09870053 
[18,] 1.26773138 1.26773138 
[19,] 1.43676223 1.43676223 
[20,] 1.60579308 1.60579308 
attr(,"scaled:center") 
    A  B 
10.500 0.205 
attr(,"scaled:scale") 
     A   B 
5.9160798 0.0591608 

如何我現在可以使用存儲的平均值和SD值從D4原始值

回答

1

的數據幀來計算,我們可以做

r1 <- d4 * attr(d4, 'scaled:scale')[col(d4)] + attr(d4, 'scaled:center')[col(d4)] 
all.equal(as.data.frame(r1), d3) 
#[1] TRUE