R:找出我的收藏中出现的最多值及其比例

时间:2018-03-24 15:51:19

标签: r

我已经尝试了一点R,目前我面临以下问题:

我有一个表格data,其中包含一些数字值属性foo。现在,如果我想从中获取比例表,我可以使用以下命令:

prop.table(table(data$foo))

对我有用并产生以下输出(这只是其中的一部分):

[1] 0.005271318 0.005271318 0.003875969 0.004031008 0.005581395 0.005736434 0.004031008 0.005891473 0.006046512

我现在要做的是找出哪个比例是最高的,我做了:

proportions <- prop.table(table(data$foo))
max(proportions)

我的问题是要执行下一步:找出(以编程方式)我的data$foo的哪个值是max(proportions)的输出的相应值。

因此,如果我将值0.05作为我的最大值(比例),我希望在我的数据集中找到0.05%偶然发生的所有值(也可能超过一个值,因为我的sum(proportions==mymax)生成了输出2)。

我尝试使用prop.table(data$foo==mymax) mymax <- max(proportions),其中(当然)没有按照我希望的方式运行。它只生成一个布尔值列表。

我怎么可能这样做?

我为一个例子创建了一些随机数据:

> dput(foo)
c(33L, 41L, 27L, 36L, 46L, 35L, 24L, 45L, 46L, 31L, 43L, 25L, 
44L, 48L, 24L, 35L, 22L, 25L, 23L, 21L, 25L, 43L, 40L, 33L, 28L, 
24L, 21L, 35L, 24L, 46L, 44L, 29L, 36L, 32L, 40L, 32L, 26L, 34L, 
37L, 49L, 46L, 36L, 46L, 38L, 41L, 36L, 32L, 50L, 29L, 23L, 37L, 
50L, 25L, 36L, 41L, 47L, 35L, 41L, 46L, 22L, 34L, 39L, 31L, 32L, 
46L, 40L, 33L, 29L, 48L, 23L, 47L, 40L, 37L, 38L, 21L, 21L, 21L, 
28L, 31L, 26L, 30L, 25L, 32L, 49L, 31L, 47L, 20L, 31L, 33L, 34L, 
38L, 30L, 41L, 41L, 50L, 32L, 41L, 49L, 21L, 49L, 26L, 21L, 29L, 
20L, 47L, 24L, 26L, 42L, 50L, 25L, 36L, 42L, 28L, 28L, 30L, 28L, 
43L, 21L, 33L, 25L, 26L, 50L, 25L, 39L, 38L, 36L, 44L, 50L, 24L, 
45L, 39L, 39L, 35L, 25L, 37L, 36L, 38L, 41L, 24L, 42L, 34L, 29L, 
35L, 20L, 40L, 41L, 20L, 49L, 45L, 20L)


> prop.table(table(foo))
foo
         20          21          22          23          24          25          26          27          28          29 
0.033333333 0.053333333 0.013333333 0.020000000 0.046666667 0.060000000 0.033333333 0.006666667 0.033333333 0.033333333 
         30          31          32          33          34          35          36          37          38          39 
0.020000000 0.033333333 0.040000000 0.033333333 0.026666667 0.040000000 0.053333333 0.026666667 0.033333333 0.026666667 
         40          41          42          43          44          45          46          47          48          49 
0.033333333 0.060000000 0.020000000 0.020000000 0.020000000 0.020000000 0.046666667 0.026666667 0.013333333 0.033333333 
         50 
0.040000000 

> myprop <- prop.table(table(foo))
> max(myprop)
[1] 0.06


> sum(myprop)
[1] 1

现在我知道,我的数据中出现的最高比例是0.06并且只发生一次,对吧?我想知道的是:那有什么价值?我能做的是:

> myprop==max(myprop)
foo
   20    21    22    23    24    **25**    26    27    28    29    30    31    32    33    34    35    36    37    38    39 
FALSE FALSE FALSE FALSE FALSE  **TRUE** FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
   40    41    42    43    44    45    46    47    48    49    50 
FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

因此我寻找的值将是25,但必须采用另一种方法,而不是手动搜索此表。我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

您似乎忽略了所提供的表名:

x <- c(1, 1, 2, 3)
(proportions <- prop.table(table(x)))
# x
#    1    2    3 
# 0.50 0.25 0.25 
max(proportions)
# [1] 0.5 
names(proportions)[which.max(proportions)]
# [1] "1"