代码之家  ›  专栏  ›  技术社区  ›  Hercules Apergis

如何从向量的平均值中选择最远的值

  •  4
  • Hercules Apergis  · 技术社区  · 6 年前

    假设向量

    vector<-c( 0.096846906,  0.068149926, -0.019938431, -0.095515090, -0.109936195, -0.006755265, -0.207243555,  0.117235435, -0.036333873, -0.156043650, -0.334150484,
       0.141990040, -0.116270635,  0.079373531,  0.070359814,  0.090415147,  0.046807444, -0.024908308,  0.022005548,  0.015559027,  0.065343488,  0.039524657,
       0.077209216,  0.051124695,  0.076794957, -0.059121977,  0.071967601,  0.042357348,  0.039801927,  0.053932640, -0.036346802, -0.070258993, -0.105611663,
       -0.138738161, -0.044395825, -0.194363631, -0.127153662,  0.052912436,  0.163879916,  0.087960810,  0.005298789, -0.191104683,  0.113214756,  0.045232380)
    

    具有 mean=-0.007702101 . 我想选择离平均值最远的值。例如,假设距离平均值最远的10个值。

    我使用此代码获取距离平均值最远的值:

    sort(abs(vector-mean(vector)))
    

    所以基本上现在我有一系列的差异,它们是有序的。但我无法找到一种方法(从名为:vector的数据中)获得距离最大的值(同样是10个最远的值)。我相信这很简单,但我真的卡住了!

    3 回复  |  直到 6 年前
        1
  •  3
  •   Sotos    6 年前

    有很多方法可以做到这一点。根据您的示例和要求,您可以,

    m <- 10
    vector[head(order(abs(vector - mean(vector)), decreasing = TRUE), m)]
    #[1] -0.3341505 -0.2072436 -0.1943636 -0.1911047  0.1638799  0.1419900 -0.1560437 -0.1387382  0.1172354  0.1132148
    

    这意味着:

    • 从平均值中取每个值之差的绝对值
    • 订单递减(从最大值开始)。订单给出的是指数而不是实际值(如 sort 确实如此)
    • 拿第一个 m 值使用 head . 另一种选择是 [1:m]
    • 将索引包装在向量中以获得实际 vector 价值观
        2
  •  1
  •   DataTx    6 年前

    您可以使用dplyr:

    vector%>%as_tibble()%>%mutate(dist_Mean = abs(value - mean(value) ))%>%arrange(desc(dist_Mean))%>%top_n(10)
    
        3
  •  0
  •   989    6 年前

    另一种方法是基于 标准偏差 这是可调的。

    认为 mn <- mean(vector) std <- sd(vector) 然后

    d <- 1.5
    vector[vector<(mn-d*std) | vector>(mn+d*std)]
    
    #[1] -0.2072436 -0.3341505 -0.1943636  0.1638799 -0.1911047
    

    通过调整 d ,您决定要偏离平均值多远。

    ( d=1 给出的数字与平均值的标准偏差超过1)