如何使用tidyverse删除基于标准dev的离群值?

问题描述 投票:0回答:1

我使用tidyverse包尝试了此代码,以基于sd过滤异常值。

rt_trimmed_data_Dec = data_Dec %>%
 group_by(Time_of_Testing, Item_Type, Group) %>%
 summarise(RT_mean = mean(RT, na.rm=TRUE), RT_sd = sd(RT, na.rm=TRUE))%>%
 ungroup()  %>%
 mutate(rt_high = RT_mean + (2.5 * RT_sd)) %>%
  mutate(rt_low = RT_mean - (2.5 * RT_sd))

然后,我尝试将两个数据框合并,以应用过滤。

data_Dec_RT = data_Dec %>%
   inner_join(rt_trimmed_data_Dec) %>%
   filter(rt < rt_high) %>%
    filter(rt > rt_low)

但是后来我得到了这个错误

Error: `by` required, because the data sources have no common variables

调用rlang::last_error()以查看回溯。 > rlang :: last_error()消息:by是必需的,因为数据源没有公共变量类别:rlang_error回溯:1. dplyr :: inner_join(。,rt_trimmed_data_Dec)9. dplyr :::: common_by.NULL(by,x,y)11. dplyr ::: bad_args(“ by”,“是必需的,因为数据源没有公共变量”)12. dplyr ::: glubort(fmt_args(args),...,.envir = .envir)13. dplyr :: inner_join(。,rt_trimmed_data_Dec)。

请提供有关如何解决此问题的建议,非常感谢您的帮助。

r dplyr inner-join tidyverse outliers
1个回答
0
投票
library(dplyr) data_Dec %>% group_by(Time_of_Testing, Item_Type, Group) %>% filter(between(RT, mean(RT, na.rm=TRUE) - (2.5 * sd(RT, na.rm=TRUE)), mean(RT, na.rm=TRUE) + (2.5 * sd(RT, na.rm=TRUE))))
© www.soinside.com 2019 - 2024. All rights reserved.