在R中缩放数据而忽略特定列

时间:2011-11-14 11:36:16

标签: r

我有一些csv格式的数据我想用于预测建模。我读取R中的数据并应用一些简单的预处理(省略NA等)。在我想训练SVM分类器之前,我想使用scale(x)函数来缩放数据。问题是我的标签列是数据集的一部分。如何告诉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);

第一列被删除并且一直没有用。

2 个答案:

答案 0 :(得分:6)

你可以做部分任务:

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

答案 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%,并专注于逻辑索引。