用于归一化要应用于R中的第二数据帧的一个数据帧的功能

时间:2015-02-24 01:05:08

标签: r syntax normalization

这是家庭作业。

我是R的新手。

我有两个数据框,每个数据框包含两列数据。我必须找到一个函数,将两个列的第一个数据帧规范化为平均值0和方差1。然后我想在第二个数据框上应用该函数。

我试过这个:

my_scale_test <- function(x,y) {
    apply(y, 2, function(x,y) {
        (y - mean(x ))/sd(x)
    }) 
}

其中x是第一个数据帧,y是要规范化的数据帧。

有人可以帮助我吗?

编辑:

我现在已经尝试了这个,但也没有工作:

scale_func <- function(x,y) {
    xmean <- mean(x)
    xstd <- sd(x)
    yout <- y
    for (i in 1:length(x[1,]))
        yout[,i] <- yout[,i] - xmean[i]
    for (i in 1:length(x[1,]))
        yout[,i] <- yout[,i]/xsd[i]
invisible(yout)
}

编辑2: 我找到了MatLab的这个工作函数(我试图在编辑1中翻译):

function [ Xout ] = scale( Xbase, Xin )
    Xmean = mean(Xbase);
    Xstd = std(Xbase);
    Xout = Xin;
    for i=1:length(Xbase(1,:))
        Xout(:,i) = Xout(:,i) - Xmean(i);
    end

    for i=1:length(Xbase(1,:))
        Xout(:,i) = Xout(:,i)/Xstd(i);
    end
end

有人可以帮我翻译吗?

1 个答案:

答案 0 :(得分:1)

由于你是R的新手,让我们尝试一些非常基本的东西。

my_scale_test <- function(x, y) {
  y.nrow <- nrow(y)
  x.mean <- data.frame(t(apply(x, 2, mean)))
  x.sd <- data.frame(t(apply(x, 2, sd)))
  # To let x.mean and x.sd have the same dimension as y, let's repeat the rows. 
  x.mean <- x.mean[rep(1, y.nrow), ]
  x.sd <- x.sd[rep(1, y.nrow), ]
  (y - x.mean)/x.sd
}

要测试,请尝试

set.seed(1)
x <- data.frame(matrix(rnorm(10), nrow = 5))
y <- x
result <- my_scale_test(x, y)
apply(result, 2, mean)
apply(result, 2, sd)