为行子集创建z分数

时间:2012-02-23 21:42:27

标签: r

我是R编程的新手,并且遇到了一些基本代码的问题。

我有一个包含以下列的数据框:condition(factor),user(factor)和sensitivity(int)。对于每个用户,有20个敏感项。我需要为每个用户创建一个具有标准化灵敏度分数的新列。这样我可以比较用户的敏感度分数。我在编写可以为每个用户的每个项目创建z分数的循环(或类似的东西)时遇到问题。

我有14个独特的用户(这会增加),有20个敏感项目。

感谢。

2 个答案:

答案 0 :(得分:1)

我会看一下plyr包。除非我错了,我经常这样,scale是你正在寻找的功能。如果您的数据位于data.frame df:

library(plyr)
ddply(df, .(user), function(x){x$scaled.sensitivity = scale(x$sensitivity)
                               return(x)})

答案 1 :(得分:1)

在这种情况下不需要循环。而是使用矢量化。让我们考虑以下模拟数据:(不确定它是否会完全重现您的数据集,但希望您能得到一般的想法)

dfrm <- data.frame(cond=gl(2, 1, 100, labels=LETTERS[1:2]), 
                   user=gl(50, 2, labels=paste("id", 1:20, sep="")), 
                   sensitivity=runif(100, 1, 5))

计算z分数就像

一样简单
dfrm$z.sensitivity <- scale(dfrm$sensitivity)

如果您希望z-scores以cond为条件,则可以执行

with(dfrm, tapply(sensitivity, cond, scale))

或使用plyr

ddply(dfrm, c("cond"), transform, sensitivity.z = scale(sensitivity))