我有一些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);
第一列被删除并且一直没有用。
答案 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%
,并专注于逻辑索引。