我已经尝试了一点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,但必须采用另一种方法,而不是手动搜索此表。我无法解决这个问题。
答案 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"