gpt4 book ai didi

r - 从变量分组的数据框中搜索并删除异常值

转载 作者:行者123 更新时间:2023-12-04 11:31:04 24 4
gpt4 key购买 nike

我有一个包含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

我需要执行以下操作:
  • 标识与中位数相差大于2个标准偏差的所有值(来自“value”变量),并按元素变量分组。
  • 从数据框中删除异常值(或创建一个排除了异常值的新数据框。

  • 我一直在使用dplyr软件包,并使用以下代码对“元素”变量进行分组,并提供平均值:
    df1=df %>%
    group_by(element) %>%
    summarise_each(funs(mean), value)

    在我提取均值之前,能否请我帮忙处理或添加至上面的代码,以便删除由“element”变量分组的离群值(在上面定义,从中位数> 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), ]

    最佳答案

    这是使用基数R的方法:

    element <- sample(letters[1:5], 1e4, replace=T)
    value <- rnorm(1e4)
    df <- data.frame(element, value)

    means.without.ols <- tapply(value, element, function(x) {
    mean(x[!(abs(x - median(x)) > 2*sd(x))])
    })

    并使用 dplyr
    df1 = df %>%
    group_by(element) %>%
    filter(!(abs(value - median(value)) > 2*sd(value))) %>%
    summarise_each(funs(mean), value)

    结果比较:
    > means.without.ols
    a b c d e
    -0.008059215 -0.035448381 -0.013836321 -0.013537466 0.021170663

    > df1
    Source: local data frame [5 x 2]

    element value
    1 a -0.008059215
    2 b -0.035448381
    3 c -0.013836321
    4 d -0.013537466
    5 e 0.021170663

    关于r - 从变量分组的数据框中搜索并删除异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687515/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com