假设载体
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)。我确信这很简单,但我真的被卡住了!
答案 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个标准偏差的数字)