R:如何摆脱依赖于某个列中应用的计算的行,指的是其他列的值?



我有一个df,列主题(subj),条件,反应时间(rt_link)。每一行是一次试验。我计算了每个受试者和条件的RTs的均值和标准差:

RTs_overview <- links_RTs %>% 
group_by(subj, condition) %>% 
summarize(mean_rt = mean(rt_link),
sd_rt = sd(rt_link))

它给出了一个漂亮的df,显示了受试者,条件以及每个RTs的均值和标准差,所以每个受试者有4行,每个条件一个。现在我想把所有的行去掉其中RT等于>或& lt;3sd为相应受试者和条件的平均值。早些时候,我摆脱了与RTs>

links_RTs <- links_cl[links_cl$rt_link < 10, ]

我试着做同样的事,但没有成功

links_RTs[links_RTs$rt_link < (lapply(mean(links4_RTs$rt_link) + 3 * sd(links4_RTs$rt_link))), ] 

我也试过没有lapply,但这也不起作用。

如何删除rt_link为>或& lt;从相应的rt-平均值(取决于受试者和条件)得到3sd ?

我的建议是保留原始数据集中的决策标准,然后基于这些标准进行子集:

library(dplyr)
set.seed(99)
# Define raw data
dat <- data.frame(subj = rep(1:25, 8),
condition = rep(c("A","B", "C", "D"), 200),
rt_link = runif(200, 0, 1))
dat %>% 
group_by(subj, condition) %>% 
mutate(mean_rt = mean(rt_link)) %>%
mutate(sd_rt = sd(rt_link)) %>%
ungroup() %>%
mutate(upr = mean_rt + (sd_rt*3)) %>%
mutate(lwr = mean_rt - (sd_rt*3)) %>%
mutate(remove = ifelse(rt_link > upr | rt_link < lwr, 1, 0))
subj condition rt_link mean_rt   sd_rt   upr     lwr remove
<int> <chr>       <dbl>   <dbl>   <dbl> <dbl>   <dbl>  <dbl>
1     1 A           0.585   0.321 0.282   1.17  -0.524       0
2     2 B           0.114   0.462 0.372   1.58  -0.654       0
3     3 C           0.684   0.709 0.0264  0.788  0.630       0
4     4 D           0.993   0.541 0.482   1.99  -0.905       0
5     5 A           0.535   0.582 0.0505  0.734  0.431       0
6     6 B           0.967   0.827 0.149   1.27   0.380       0
7     7 C           0.671   0.508 0.174   1.03  -0.0147      0
8     8 D           0.295   0.442 0.158   0.916 -0.0315      0
9     9 A           0.358   0.249 0.117   0.600 -0.101       0
10    10 B           0.175   0.167 0.00939 0.195  0.138       0
# ... with 790 more rows

然后过滤:

mydat <- dat[dat$remove == 0,]

最新更新