2011-11-14 32 views
0

我有一些我想用於預測建模的csv格式的數據。我讀取R中的數據並應用一些簡單的預處理(省略NA等)。在我想訓練SVM分類器之前,我想使用scale(x)函數來縮放數據。問題是我的標籤列是數據集的一部分。我如何告訴R忽略那些列?或者這裏的最佳做法是什麼?在R中縮放數據忽略特定列

label, X1, X2, X3, ..., Xn 
Y, 34, 74, 29, ..., 47 
N, 88, 46, 95, ..., 33 
N, 58, 78, 25, ..., 68 
Y, 33, 56, 61, ..., 13 

如果我嘗試:

x <- scale(trouble[,-c(1)]) 
trouble <- x 
summary(trouble) 
rm(x); 

第一列被刪除,一去不復返了。

回答

4

你可以做部分轉讓:

trouble[, -c(1)] <- scale(trouble[, -c(1)]) 
1

你應該注意到scale也操作上data.frame對象。

dtf <- read.table(text = "label, X1, X2, X3, ..., Xn 
+ Y, 34, 74, 29, ..., 47 
+ N, 88, 46, 95, ..., 33 
+ N, 58, 78, 25, ..., 68 
+ Y, 33, 56, 61, ..., 13 
+ ", sep = ",", header = TRUE) 
> (dtf <- dtf[-5]) 
    label X1 X2 X3 Xn 
1  Y 34 74 29 47 
2  N 88 46 95 33 
3  N 58 78 25 68 
4  Y 33 56 61 13 
> (dtf_scales <- scale(dtf[-1])) 
      X1   X2   X3   Xn 
[1,] -0.7435537 0.6958884 -0.7210036 0.2913066 
[2,] 1.3422592 -1.1598139 1.3039428 -0.3128849 
[3,] 0.1834743 0.9609887 -0.8437277 1.1975938 
[4,] -0.7821798 -0.4970631 0.2607886 -1.1760155 
attr(,"scaled:center") 
    X1 X2 X3 Xn 
53.25 63.50 52.50 40.25 
attr(,"scaled:scale") 
     X1  X2  X3  Xn 
25.88919 15.08863 32.59346 23.17146 

因此,有...

編輯:

可以使用負下標只能用數字指標。如果您傳遞了一個列名稱,則不能使用否定下標,因此dtf[-"label"]將不起作用。在這種情況下,您可以使用which,%in%,並專注於邏輯索引。