我有一个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 提前感谢
发布于 2017-10-12 02:17:54
您可以尝试这个粗略的解决方案。这里的想法是为条件的平均值和标准差创建两个变量,以考虑这种“每个条件每个主题的平均值”的情况。然后,根据每个条件下每个受试者的平均值删除试验。
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, ]https://stackoverflow.com/questions/46690343
复制相似问题