首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据帧中删除异常值(+-2 SDs)

从数据帧中删除异常值(+-2 SDs)
EN

Stack Overflow用户
提问于 2017-10-11 22:06:50
回答 1查看 593关注 0票数 0

我有一个data.frame,它包含我所有的对象(总共20个)以及每个条件下它们的反应时间(总共3个)。请参见下面的示例。

我想从每个对象的每个条件的平均值中去除异常值。

我使用了以下代码:

代码语言:javascript
复制
dat<- do.call(rbind,by(dat,dat$condition,function(x) x[!abs(scale(x$rt_raw)) > 2,] ))

但它似乎是按条件对每行进行分组,而不是按条件和主题进行分组。有没有别的办法呢?还是我错了?

代码语言:javascript
复制
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   

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2017-10-12 02:17:54

您可以尝试这个粗略的解决方案。这里的想法是为条件的平均值和标准差创建两个变量,以考虑这种“每个条件每个主题的平均值”的情况。然后,根据每个条件下每个受试者的平均值删除试验。

代码语言:javascript
复制
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, ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46690343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档