R for循环,带有用于z分数计算的面板数据

时间:2017-05-20 00:12:22

标签: r normalization

我目前正致力于在RStudio中创建一些功能,其中包含从2005年到2013年观察到的大约100,000个人的数据集。我有一个不平衡的面板,有两个感兴趣的变量 - 为了简单起见,我们称它们为x和y。

我指定的功能采用以下形式:

z = (mean(x) + mean(y)) / sd(x) 

值得注意的是,它是一种正常的z得分度量,通常在模型估计的预处理阶段用作归一化技术。

指定函数的目的是为数据集中的每个个体i计算z,同时考虑到对于不同个体存在不同的时间段T = 1,2 ...,t。换句话说,在某些情况下,我有2008 - 2013年的数据,而对于其他人,我有2006 - 2010年的数据。

目前我已将我的功能指定如下:

z1 <- function(x,y) {
(mean(x) + mean(y))/sd(x)
}

当我执行它时:

z1(x,y) 

我只得到一个数字作为输出,表示从观察总数(约150,000行)计算。我该如何编辑代码以确保为数据集中的每个人获取一个数字?

我假设我必须使用for循环来迭代并计算当时一个人的z分数,但我不确定如何在编写我的函数时指定它。

1 个答案:

答案 0 :(得分:0)

它返回单个值,因为均值(x),平均值(y)和sd(x)都是数值,而你并没有要求它做任何其他事情。

以下代码模拟两个(向量)并执行您想要的(我认为是)。如果你的任务更具描述性,那将会有所帮助。

x <- rbinom(100,3,(2/5))
y <- rpois(100,2.5)


f <- function(mvL,mvR){
    answer = NULL;
    vector <- readline('Which?: ')
    if (vector=='Left'){
         for  (i in 1:length(mvL)){
             answer[i] = mvL[i] - ((mean(mvL) + mean(mvR)) / sd(mvL));
         }
    }
    else{
      for (i in 1:length(mvR)){
        answer[i] = mvR[i] - ((mean(mvL) + mean(mvR)) / sd(mvL));
      }
    }
    return (answer);
}

f(x,y)