首页 > 解决方案 > 取平均值而不创造新值

问题描述

我将如何在下面的示例中找到中间选项或“平均”?在这种情况下,我不想通过取所有列的平均值并取中位数来创建新值。我需要能够弄清楚蓝色(col_5)是“中间”。有小费吗?谢谢!

col_1 <- c(0,32,34,36,37,41,43,44,47,48,50)
col_2 <- c(0,3,4,5,6,7,9,14,16,18,20)
col_3 <- c(0,22,23,25,28,31,32,35,38,39,41)
col_4 <- c(0,1,2,3,5,6,8,9,11,13,15)
col_5 <- c(0,2,5,9,11,15,25,33,36,37,38)


df1 <- data.frame(col_1, col_2, col_3, col_4, col_5)

plot(df1$col_1, type ="l")
lines(df1$col_2)
lines(df1$col_3)
lines(df1$col_4)
lines(df1$col_5, col='blue')

在此处输入图像描述

标签: raveragemeanmedian

解决方案


您需要调整我返回“中间”结果的方式,但基本上从您的问题来看,我认为您的问题是:

对于表中的所有列,找到平均值,然后确定其中哪一个是“中间”或中位数

因此,为了实现这一点,我建议遍历列以计算出好的 ole 方式的平均值,sum(x) / length(x)基本上使用:

avgs <- sapply(df1, function(i){
    sum(i) / nrow(df1)
})

> avgs
      col_1       col_2       col_3       col_4       col_5 
37.45454545  9.27272727 28.54545455  6.63636364 19.18181818 

# Just giving you a visual here
> sort(avgs)
      col_4       col_2       col_5       col_3       col_1 
 6.63636364  9.27272727 19.18181818 28.54545455 37.45454545 

所以现在我们只想知道哪个值是我们的中间值或median

> avgs[which(avgs == median(avgs))]
     col_5 
19.1818182 

# OR if you just need the name:

> names(which(avgs == median(avgs)))
[1] "col_5"

推荐阅读