我有一个包含5个变量和800行的数据框:
head(df)
V1 variable value element OtolithNum
1 24.9835 V7 130230.0 Mg 25
2 24.9835 V8 145844.0 Mg 25
3 24.9835 V9 126126.0 Mg 25
4 24.9835 V10 103152.0 Mg 25
5 24.9835 V11 129571.9 Mg 25
6 24.9835 V12 114214.0 Mg 25
我需要执行以下操作:
- 按元素变量分组,识别所有值(来自“value”变量)与中位数相差2个标准差以上的值。
- 从数据框中去除异常值(或创建一个新的数据框,排除异常值)。
我一直在使用dplyr包,并使用以下代码按“element”变量进行分组,并提供平均值:
df1=df %>%
group_by(element) %>%
summarise_each(funs(mean), value)
请帮我修改或添加上述代码,以便在提取均值之前,按“元素”变量分组删除离群值(如上所定义为距中位数>2 sd),谢谢。
我已尝试了来自另一个帖子的以下代码(因此数据名称与上面的个人数据不匹配),但并没有成功:
#standardize each column (we use it in the outdet function)
scale(dat)
#create function that looks for values > +/- 2 sd from mean
outdet <- function(x) abs(scale(x)) >= 2
#index with the function to remove those values
dat[!apply(sapply(dat, outdet), 1, any), ]