r - 如何为 R 中的目标和参与者单独排除异常值
问题描述
我是 R 的(非常)新手,我想知道是否可以得到一些帮助。我想知道如何排除每个参与者的平均反应时间和每个目标的平均反应时间的两个标准偏差的异常值并将其替换为 na。
我的数据如下所示:
ptp rt group target
1 1094 E dog
1 2100 E hat
2 918 E dog
2 1211 E hat
3 1142 E dog
3 1222 E hat
1 10 W dog
1 993 W hat
2 897 W dog
2 1078 W hat
3 4002 W dog
3 899 W hat
我已经计算了每个参与者和项目的平均值和标准差
mean <- tapply(data$rt, data$target, mean)
sd <- tapply(data$rt, data$target, sd)
mean <- tapply(data$rt, data$ptp, mean)
sd <- tapply(data$rt, data$ptp, sd)
但是,我是 R 的超级新手,并且编写代码来计算平均值的两个标准偏差(平均值 + 1.96 * SD 和平均值 - 1.96 * SD)并转换所有参与者范围之外的值to NA 有点超出我的想象。一定有比手工更简单的方法!任何帮助将不胜感激。
非常感谢,珍
解决方案
要获得漂亮的汇总统计信息,您可以使用aggregate()
.
aggregate(rt ~ target + ptp, dat, function(x) c(mean=mean(x), sd=sd(x), sd196=sd(x)*1.96))
# target ptp rt.mean rt.sd rt.sd196
# 1 dog 1 552.00000 766.50375 1502.34735
# 2 hat 1 1546.50000 782.76721 1534.22373
# 3 dog 2 907.50000 14.84924 29.10452
# 4 hat 2 1144.50000 94.04520 184.32860
# 5 dog 3 2572.00000 2022.32539 3963.75777
# 6 hat 3 1060.50000 228.39549 447.65516
对于排除(假设您想排除每个 的全部观察"target"
),您可以将数据的子集设置为NA
using ave()
。
dat$rt[with(dat, ave(rt, target, ptp, FUN=function(x) mean(x)/sd(x))) > 1.96] <- NA
# ptp rt group target
# 1 1 1094 E dog
# 2 1 NA E hat
# 3 2 NA E dog
# 4 2 NA E hat
# 5 3 1142 E dog
# 6 3 NA E hat
# 7 1 10 W dog
# 8 1 NA W hat
# 9 2 NA W dog
# 10 2 NA W hat
# 11 3 4002 W dog
# 12 3 NA W hat
为了不排除整个参与者,请不要包含ptp
并ave()
执行:
dat$rt[with(dat, ave(rt, target, FUN=function(x) mean(x)/sd(x))) > 1.96] <- NA
注意:事先检查名称是否尚未分配给功能。在您的示例中,您创建了与mean()
和sd()
函数的冲突。
数据
dat <- structure(list(ptp = c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L,
3L, 3L), rt = c(1094L, 2100L, 918L, 1211L, 1142L, 1222L, 10L,
993L, 897L, 1078L, 4002L, 899L), group = c("E", "E", "E", "E",
"E", "E", "W", "W", "W", "W", "W", "W"), target = c("dog", "hat",
"dog", "hat", "dog", "hat", "dog", "hat", "dog", "hat", "dog",
"hat")), row.names = c(NA, -12L), class = "data.frame")
推荐阅读
- json - 如何使用 PowerShell 从 json 响应中获取单个值
- reactjs - 在 useState 中设置的反应只运行一次
- c++ - QGraphicsItems 未显示 QGraphicsScene
- docker - Docker 构建命令在 WSL 2 Ubuntu 18.04 中挂起
- python - 在 Numpy 数组中拆分字符串
- flutter - Flutter - 当容器高度大于数字时如何显示按钮
- bash - tmux 窗口因自动注销而关闭
- c++ - 提高计算机处理大图的处理能力
- r - 2016年给定条件列“年”时,如何在R中为美国的ProviderPerFFS绘制usmap
- azure - 如何处理 Azure 应用服务中的性能问题