如何 select 距离向量均值最远的值
How to select the most distant values from the mean of a vector
假设向量
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
。我想要 select 离均值最远的值。例如,假设距离均值最远的 10 个值。
我使用此代码获取与平均值最远的值:
sort(abs(vector-mean(vector)))
所以基本上现在我有一系列不同的订单。但是我找不到一种方法来获取距离最高(又是最远的 10 个)的值(来自名为:vector 的数据)。我确信这很简单,但我真的卡住了!
有很多方法可以做到这一点。根据您的示例和要求,您可以这样做,
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
那样)
- 使用
head
获取前 m
个值。另一种选择是 [1:m]
- 将索引包装在向量中以获得实际的
vector
值
另一种方法是基于可调的标准偏差。
假设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 个标准差的数字)
你可以使用 dplyr:
vector%>%as_tibble()%>%mutate(dist_Mean = abs(value - mean(value) ))%>%arrange(desc(dist_Mean))%>%top_n(10)
假设向量
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
。我想要 select 离均值最远的值。例如,假设距离均值最远的 10 个值。
我使用此代码获取与平均值最远的值:
sort(abs(vector-mean(vector)))
所以基本上现在我有一系列不同的订单。但是我找不到一种方法来获取距离最高(又是最远的 10 个)的值(来自名为:vector 的数据)。我确信这很简单,但我真的卡住了!
有很多方法可以做到这一点。根据您的示例和要求,您可以这样做,
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
那样) - 使用
head
获取前m
个值。另一种选择是[1:m]
- 将索引包装在向量中以获得实际的
vector
值
另一种方法是基于可调的标准偏差。
假设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 个标准差的数字)
你可以使用 dplyr:
vector%>%as_tibble()%>%mutate(dist_Mean = abs(value - mean(value) ))%>%arrange(desc(dist_Mean))%>%top_n(10)