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

时间:2018-01-24 13:58:29

标签: r distance mean

假设载体

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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

你可以使用dplyr:

vector%>%as_tibble()%>%mutate(dist_Mean = abs(value - mean(value) ))%>%arrange(desc(dist_Mean))%>%top_n(10)

答案 2 :(得分:0)

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

假设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个标准偏差的数字)