R 中的中值 - Returns 四舍五入的数字
Medians Values in R - Returns Rounded Number
我有一个 table 数据,我根据它们所属的集群标记了行,并计算了行列值的平均值。我想 select 每个集群的中间行。
例如,只看一个,我想使用:
median(as.numeric(as.vector(subset(df,df$cluster == i )$avg)))
我可以看到
> as.numeric(as.vector(subset(df,df$cluster == i )$avg))
[1] 48.11111111 47.77777778 49.44444444 49.33333333 47.55555556 46.55555556 47.44444444 47.11111111 45.66666667 45.44444444
然而,中位数是
> median(as.numeric(as.vector(subset(df,df$cluster == i )$avg)))
[1] 47.5
我想通过将中位数 returned 与列中的平均值相匹配来找到中位数记录,但这 return.
是不可能的
我找到了一些关于使用均值函数进行舍入的文档和问题,但不幸的是,这似乎并不适用于此。
我也可以限制数据的小数位数,但有些记录会太接近,如果四舍五入到一位小数,重复项很常见。
有一种更简单的方法:使用 dplyr
library(dplyr)
df%>%
group_by(cluster)%>%
summarise(Median=median(avg))
当输入有偶数个值时(比如你有 10 个值),那么中间没有直接的值。在偶数个输入的情况下,中位数的标准定义(R 实现)averages the two middle values。您可以 rank
数据,并且在偶数长度输入的情况下 select n/2
或 n/2 + 1
记录。
因此,如果您的数据是 x = c(8, 6, 7, 5)
,则中位数是 6.5.
您似乎想要“中位数”的索引,即 2 或 3。
如果我们假设没有关系,那么我们可以通过
得到这些答案
which(rank(x) == length(x) / 2)
# [1] 2
which(rank(x) == length(x) / 2 + 1)
# [1] 3
如果平局 是 的可能性,那么 rank
的默认平局打破方法会给您带来一些问题。查看 ?rank
并确定您要使用哪个选项。
当然,我们可以把它变成一个小效用函数:
median_index = function(x) {
lx = length(x)
if (lx %% 2 == 1) {
return(match(median(x), x))
}
which(rank(x, ties.method = "first") == lx/2 + 1)
}
我有一个 table 数据,我根据它们所属的集群标记了行,并计算了行列值的平均值。我想 select 每个集群的中间行。
例如,只看一个,我想使用:
median(as.numeric(as.vector(subset(df,df$cluster == i )$avg)))
我可以看到
> as.numeric(as.vector(subset(df,df$cluster == i )$avg))
[1] 48.11111111 47.77777778 49.44444444 49.33333333 47.55555556 46.55555556 47.44444444 47.11111111 45.66666667 45.44444444
然而,中位数是
> median(as.numeric(as.vector(subset(df,df$cluster == i )$avg)))
[1] 47.5
我想通过将中位数 returned 与列中的平均值相匹配来找到中位数记录,但这 return.
是不可能的我找到了一些关于使用均值函数进行舍入的文档和问题,但不幸的是,这似乎并不适用于此。
我也可以限制数据的小数位数,但有些记录会太接近,如果四舍五入到一位小数,重复项很常见。
有一种更简单的方法:使用 dplyr
library(dplyr)
df%>%
group_by(cluster)%>%
summarise(Median=median(avg))
当输入有偶数个值时(比如你有 10 个值),那么中间没有直接的值。在偶数个输入的情况下,中位数的标准定义(R 实现)averages the two middle values。您可以 rank
数据,并且在偶数长度输入的情况下 select n/2
或 n/2 + 1
记录。
因此,如果您的数据是 x = c(8, 6, 7, 5)
,则中位数是 6.5.
您似乎想要“中位数”的索引,即 2 或 3。
如果我们假设没有关系,那么我们可以通过
得到这些答案which(rank(x) == length(x) / 2)
# [1] 2
which(rank(x) == length(x) / 2 + 1)
# [1] 3
如果平局 是 的可能性,那么 rank
的默认平局打破方法会给您带来一些问题。查看 ?rank
并确定您要使用哪个选项。
当然,我们可以把它变成一个小效用函数:
median_index = function(x) {
lx = length(x)
if (lx %% 2 == 1) {
return(match(median(x), x))
}
which(rank(x, ties.method = "first") == lx/2 + 1)
}