2015-02-24 40 views
0

这是家庭作业。正常化一个数据帧以在R中的第二个数据帧上应用的函数

我是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

既然你是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) 
+0

太感谢你了! – 2015-02-25 10:53:20

相关问题