我是R编程的新手,并且遇到了一些基本代码的问题。
我有一个包含以下列的数据框:condition(factor),user(factor)和sensitivity(int)。对于每个用户,有20个敏感项。我需要为每个用户创建一个具有标准化灵敏度分数的新列。这样我可以比较用户的敏感度分数。我在编写可以为每个用户的每个项目创建z分数的循环(或类似的东西)时遇到问题。
我有14个独特的用户(这会增加),有20个敏感项目。
感谢。
答案 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))