标签: median

用于查找3个值的中值的通用方法

我需要一种方法来获得3个值的中值,我认为这是一个编写泛型方法的好机会,因为我没有真正实践过.我写了这个并且看起来非常直截了当,虽然我得到了警告,但根据我的测试,它似乎工作得很好.

我知道我可以使用固有排序的集合,或者Collections.sort(),但这种方法是为了理解.

我想指出一些事情:

  1. 我发现,如果我想声明,这并不工作medianHelperArrays.asList(a, b, c)这是为什么?试图搜索这个给我无关的结果,否则它是难以捉摸的,因为我不确定发生了什么.我得到了一个UnsupportedOperationException,但这不是我下面的方式.
  2. 为什么我会收到警告?有什么不对/缺少?

方法如下:

private static <T extends Comparable> T median(T a, T b, T c) {
    List<T> medianHelper = new ArrayList<>();
    T max;
    T min;

    medianHelper.add(a);
    medianHelper.add(b);
    medianHelper.add(c);

    if (a.compareTo(b) >= 0) {
        max = a;
        min = b;
    } else {
        max = b;
        min = a;
    }

    if (max.compareTo(c) == -1) {
        max = c;
    }

    if (min.compareTo(c) >= 0) {
        min = c;
    } …
Run Code Online (Sandbox Code Playgroud)

java sorting generics median

10
推荐指数
1
解决办法
1033
查看次数

如何在R中的因子水平内进行中位数分裂?

在这里,我创建一个新列,以指示myData是高于还是低于其中位数

### MedianSplits based on Whole Data
#create some test data
myDataFrame=data.frame(myData=runif(15),myFactor=rep(c("A","B","C"),5)) 

#create column showing median split
myBreaks= quantile(myDataFrame$myData,c(0,.5,1))
myDataFrame$MedianSplitWholeData = cut(
    myDataFrame$myData,
    breaks=myBreaks, 
    include.lowest=TRUE,
    labels=c("Below","Above"))

#Check if it's correct
myDataFrame$AboveWholeMedian = myDataFrame$myData > median(myDataFrame$myData)
myDataFrame
Run Code Online (Sandbox Code Playgroud)

工作良好.现在我想做同样的事情,但计算myFactor每个级别的中位数分割.

我想出来了:

#Median splits within factor levels
byOutput=by(myDataFrame$myData,myDataFrame$myFactor, function (x) {
     myBreaks= quantile(x,c(0,.5,1))
     MedianSplitByGroup=cut(x,
       breaks=myBreaks, 
       include.lowest=TRUE,
       labels=c("Below","Above"))
     MedianSplitByGroup
     })
Run Code Online (Sandbox Code Playgroud)

byOutput包含我想要的东西.它正确地对因子A,B和C的每个元素进行分类.但是我想创建一个新列myDataFrame $ FactorLevelMedianSplit,它显示新计算的中值分割.

如何将"by"命令的输出转换为有用的数据框列?

我想也许"by"命令不是R-like方式来做这个...

更新:

有了Thierry如何巧妙地使用factor()的例子,并且在Spector的书中发现了"ave"函数,我发现了这个解决方案,它不需要额外的包.

myDataFrame$MediansByFactor=ave(
    myDataFrame$myData,
    myDataFrame$myFactor,
    FUN=median)

myDataFrame$FactorLevelMedianSplit = factor(
    myDataFrame$myData>myDataFrame$MediansByFactor, 
    levels = c(TRUE, FALSE), 
    labels = c("Above", "Below"))
Run Code Online (Sandbox Code Playgroud)

r median dataframe

9
推荐指数
1
解决办法
9598
查看次数

3个函数的中位数比较数?

到目前为止,我的函数找到3个数字的中位数并对它们进行排序,但它总是进行三次比较.我想我可以在某处使用嵌套的if语句,这样有时我的函数只会进行两次比较.

int median_of_3(int list[], int p, int r)
{
    int median = (p + r) / 2;

    if(list[p] > list[r])
        exchange(list, p, r);
    if(list[p] > list[median])
        exchange(list, p, median);
    if(list[r] > list[median])
        exchange(list, r, median);

    comparisons+=3;                // 3 comparisons for each call to median_of_3

    return list[r];
}
Run Code Online (Sandbox Code Playgroud)

我不确定我在哪里可以看到嵌套的if语句.

c++ algorithm median

9
推荐指数
2
解决办法
1万
查看次数

如何计算分组数据集的中位数?

我的数据集如下:

salary  number
1500-1600   110
1600-1700   180
1700-1800   320
1800-1900   460
1900-2000   850
2000-2100   250
2100-2200   130
2200-2300   70
2300-2400   20
2400-2500   10
Run Code Online (Sandbox Code Playgroud)

如何计算此数据集的中位数?这是我尝试过的:

x <- c(110, 180, 320, 460, 850, 250, 130, 70, 20, 10)
colnames <- "numbers"
rownames <- c("[1500-1600]", "(1600-1700]", "(1700-1800]", "(1800-1900]", 
              "(1900-2000]", "(2000,2100]", "(2100-2200]", "(2200-2300]",
              "(2300-2400]", "(2400-2500]")
y <- matrix(x, nrow=length(x), dimnames=list(rownames, colnames))
data.frame(y, "cumsum"=cumsum(y))

            numbers cumsum
[1500-1600]     110    110
(1600-1700]     180    290
(1700-1800]     320    610
(1800-1900]     460   1070
(1900-2000]     850   1920
(2000,2100]     250   2170
(2100-2200] …
Run Code Online (Sandbox Code Playgroud)

r median

9
推荐指数
1
解决办法
1万
查看次数

如何在JavaScript(或PHP)中获取数组的中位数和四分位数/百分位数?

这个问题变成了问答,因为我很难找到答案,并认为它对其他人可能有用

我有一个的JavaScript 数组,需要在JavaScript中计算其Q2(第50个百分数,即MEDIAN),Q1(第25个百分位数)和Q3(第75个百分位数)值。

在此处输入图片说明

javascript php statistics median percentile

9
推荐指数
3
解决办法
7549
查看次数

如何计算Map <Int,Int>的中值?

对于一个映射,其中键表示一个序列的数量,并且值是计数这个数字在序列中出现的频率,java中的算法实现如何计算中值?

例如:

1,1,2,2,2,2,3,3,3,4,5,6,6,6,7,7
Run Code Online (Sandbox Code Playgroud)

在地图中:

Map<Int,Int> map = ...
map.put(1,2)
map.put(2,4)
map.put(3,3)
map.put(4,1)
map.put(5,1)
map.put(6,3)
map.put(7,2)

double median = calculateMedian(map);
print(median);
Run Code Online (Sandbox Code Playgroud)

会导致:

> print(median);
3
>
Run Code Online (Sandbox Code Playgroud)

所以我要找的是一个java实现calculateMedian.

java algorithm median

8
推荐指数
3
解决办法
3015
查看次数

找到7个数字的中位数的比较数

我可以通过12次比较找到中位数.但我想知道比较的最小数量以及如何进行比较.

algorithm compare minimum median

8
推荐指数
1
解决办法
1886
查看次数

当我在数组的列上取中值时,如何忽略零?

我有一个简单的numpy数组.

array([[10,   0,  10,  0],
       [ 1,   1,   0,  0]
       [ 9,   9,   9,  0]
       [ 0,  10,   1,  0]])
Run Code Online (Sandbox Code Playgroud)

我想分别取这个数组的每列的中位数.

但是,0在计算中位数的过程中,我想忽略不同的几个值.

为了进一步复杂化,我想保留列只有0条目的中位数0.以这种方式,这些列将作为占位符的一部分,保持矩阵的尺寸相同.

numpy文档没有任何适用于我想要的参数(也许我被R获得的许多开关所破坏!)

numpy.median(a, axis=None, out=None, overwrite_input=False)[source]

有人可以请一个有效的方法来解决这个问题,这是否符合numpy的精神?我可能会破解它,但在那种情况下,我觉得我已经打败了首先使用numpy的目的.

提前致谢.

python arrays numpy zero median

8
推荐指数
2
解决办法
8226
查看次数

ggplot2 boxplot medians没有按预期绘图

所以,我有一个相当大的数据集(Dropbox:csv文件),我正在尝试使用它geom_boxplot.以下产生了似乎合理的情节:

require(reshape2)
require(ggplot2)
require(scales)
require(grid)
require(gridExtra)

df <- read.csv("\\Downloads\\boxplot.csv", na.strings = "*")
df$year <- factor(df$year, levels = c(2010,2011,2012,2013,2014), labels = c(2010,2011,2012,2013,2014))

d <- ggplot(data = df, aes(x = year, y = value)) +
    geom_boxplot(aes(fill = station)) + 
    facet_grid(station~.) +
    scale_y_continuous(limits = c(0, 15)) + 
    theme(legend.position = "none"))
d
Run Code Online (Sandbox Code Playgroud)

然而,当你深入挖掘时,问题就会蔓延开来.当我用它们的值标记boxplot medians时,会产生以下图表.

df.m <- aggregate(value~year+station, data = df, FUN = function(x) median(x))
d <- d + geom_text(data = df.m, aes(x = year, y = value, label = value)) …
Run Code Online (Sandbox Code Playgroud)

r median ggplot2 boxplot

8
推荐指数
1
解决办法
1375
查看次数

用R中的日期中位数数据

我需要将字段"步骤"中的缺失值替换为在特定日期(按"日期"分组)计算的"步数"的中位数,并删除NA值.我已经提到了这个帖子,但我的NA值没有被替换.有人可以帮我找出我错在哪里吗?我更喜欢使用base package/data table/plyr.数据集看起来很近.像这样:-

        steps      date interval
    1:    NA 2012-10-01        0
    2:    NA 2012-10-01        5
    3:    NA 2012-10-01       10
    4:    NA 2012-10-01       15
    5:    NA 2012-10-01       20
   ---                          
17564:    NA 2012-11-30     2335
17565:    NA 2012-11-30     2340
17566:    NA 2012-11-30     2345
17567:    NA 2012-11-30     2350
17568:    NA 2012-11-30     2355
Run Code Online (Sandbox Code Playgroud)

数据集(活动)的结构和摘要如下所示

 #str(activity)  
 Classes ‘data.table’ and 'data.frame': 17568 obs. of  3 variables:
     $ steps   : int  NA NA NA NA NA NA NA NA NA NA ...
     $ date    : Date, format: …
Run Code Online (Sandbox Code Playgroud)

r median missing-data plyr

8
推荐指数
1
解决办法
835
查看次数