带有分类变量的demean数据集

时间:2015-12-19 10:23:03

标签: r categorical-data

我有一个不容易克服的问题。我有一个包含分类和连续变量的数据集,我想只使用整个列的平均值来贬低连续变量(显然是因为你不能贬低分类变量)。

这就是我所拥有的:

center_colmeans <- function(x) {
    xcenter = colMeans(x)
    x - rep(xcenter, rep.int(nrow(x), ncol(x)))
}

center_colmeans(Data)

但是,我不知道如何表明我不想贬低分类变量,因此我收到错误。有没有一种简单的方法可以解决这个问题?

我的数据集的一个例子可以上床(变量国家给我带来了困难):

Country<- c('BE','BE','DE','GR','IT','ES','DE','NL')
Landvalue<- c(21000, 23400, 26800, 15000,18000,23000,19000,23000)
Temperature <- c('15','16','14','18','23','21','12','15')
Data <- data.frame(Country, Landvalue, Temperature)

输出应该变为(每列的每个观察值减去每列的平均值):

Country<- c('BE','BE','DE','GR','IT','ES','DE','NL')
Landvalue<-c(-150, 2250,5650,-6150,-3150,1850,-2150,1850)
Temperature<-c(-1.75, -0.75, -2.75, 1.25, 6.25, 4.25,-4.75, -1.75)
OutputData <- data.frame(Country, Landvalue, Temperature)

非常感谢!

1 个答案:

答案 0 :(得分:1)

尝试:

Data[,sapply(Data,  is.numeric)] <- apply(Data[sapply(Data,  is.numeric)], 2, function(x) scale(x, scale = FALSE))
Data
  Country Landvalue Temperature
1      BE      -150      -0.875
2      BE      2250       0.125
3      DE      5650      -1.875
4      GR     -6150       1.125
5      IT     -3150       3.125
6      ES      1850       2.125
7      DE     -2150      -2.875
8      NL      1850      -0.875