我有一个data.frame,包含我的所有科目(总共20个)和每个条件的反应时间(总共3个)。见下面的例子。
我想从每个主题的每个条件的平均值中删除异常值
我使用了这段代码:
dat<- do.call(rbind,by(dat,dat$condition,function(x) x[!abs(scale(x$rt_raw)) > 2,] ))
但它似乎按条件分组每一行,而不是条件和主题。 还有另一种方法吗?或者我错了吗?
rt_raw subject condition
0.9193426 1 L
0.7985855 1 C
0.7000456 1 S
0.8501735 2 C
0.715198 2 S
0.7865169 2 L
提前致谢
答案 0 :(得分:0)
你可以试试这个粗略的解决方案。这里的想法是为条件的平均值和标准差创建两个变量,以考虑这个&#34;每个条件的每个主题的平均值&#34;案件。 然后基于每个受试者的每个受试者的平均值来移除试验。
dat <- data.frame(rt_raw = runif(12, 1, 10),
subject = sort(rep(1:3, 4)),
condition = rep(c("L", "C", "S"), 4))
# mean and sd per condition, for each subject (each row)
dat$mean.condition <- by(dat$rt_raw, dat$condition, mean)
dat$sd.condition <- by(dat$rt_raw, dat$condition, sd)
# remove outliers
dat2 <- dat[!(abs(dat$rt_raw - dat$mean.condition)/dat$sd.condition) > 1, ]
dat3 <- dat[!(abs(dat$rt_raw - dat$mean.condition)/dat$sd.condition) > 1.5, ]
dat4 <- dat[!(abs(dat$rt_raw - dat$mean.condition)/dat$sd.condition) > 2, ]