2014-02-14 50 views
0

數據:https://drive.google.com/file/d/0B20HmmYd0lsFbnE4RUh6N0xtUHc/edit?usp=sharing卸下行與Z評分上述3

在哪裏的DAT $ C,我想與RT除去Z值3或上述項目對於每個SXS組合。

我有兩種方法(乾淨的功能和使用下面的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)) 

回答

2

我無法獲取您的示例數據。

假設你有zscore已經計算出,放入一個數據幀 你可以簡單地說

mydata[mydata$score <=3, ] 

應該是夠了!