删除Z得分高于3的行

时间:2014-02-14 10:48:02

标签: r plyr

数据:https://drive.google.com/file/d/0B20HmmYd0lsFbnE4RUh6N0xtUHc/edit?usp=sharing

如果是$ C,我想删除每个sxS组合的Z得分为3或以上的项目。

我有两种方法(清洁功能和线路使用下面的plyr包)我认为我可以做到这一点,但是一个删除的行多于另一个。有人可以向我解释为什么我的清洁功能与使用plyr的线不一致。包装

dat <- read.table(file="dat.txt")


# 3SD clean function
  clean <- function(df) {
 dfc <- df[as.logical(df$C),]
n=tapply(df$RT,list(df$s,df$S),length)
ns=tapply(df$RT,list(df$s),length)
mn=tapply(df$RT,list(df$s,df$S),mean)
sd=tapply(df$RT,list(df$s,df$S),sd)
upper <- mn+3*sd
bad <- logical(dim(df)[1])
levs <- paste(df$s,df$S,sep=".")
for (i in levels(df$s)) for (j in levels(df$S)) {
lev <- paste(i,j,sep=".")      
bad[levs==lev] <- df[levs==lev,"RT"] > upper[i,j]
}
df=df[!bad,]
nok=tapply(df$RT,list(df$s,df$S),length)
pbad=100-100*nok/n
print(aperm(round(pbad,1),c(2,1)))
nok=tapply(df$RT,list(df$s),length)
pbad=100-100*nok/ns
print(sort(round(pbad,1)))  
print(mean(pbad,na.rm=T))
df
}


require(plyr)
str(ddply(dat,.(s,S,C),function(x) x[scale(x$RT)< 3.00,]))
str(clean(dat))

1 个答案:

答案 0 :(得分:2)

我无法获取您的样本数据。

假设您已经计算了zscore并将其放入数据框中 你可以简单地说

 mydata[mydata$score <=3, ]

应该够了!