【发布时间】:2020-03-23 08:19:29
【问题描述】:
这可能是一个基本问题,但我还没有找到适合我需要的答案,即使有很多类似的。
我正在尝试从每列中选择前 3 个值(将行号保留为 id),但我无法找到合适的函数。
我从一开始就有一个这样的矩阵,使用该代码添加 id 列
top_probs <- doc_topic_distr %>%
magrittr::set_rownames(seq_len(nrow(.))) %>%
as_tibble(rownames = "id")
id V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1 1 0.000000000 0.000000000 0.133333333 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.181481481 0.685185185
2 2 0.950000000 0.000000000 0.050000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
3 3 0.028571429 0.114285714 0.814285714 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.014285714 0.028571429
4 4 0.000000000 0.000000000 0.000000000 0.002127660 0.240425532 0.136170213 0.408510638 0.076595745 0.000000000 0.000000000 0.000000000 0.136170213
5 5 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.025000000 0.025000000 0.050000000 0.900000000
6 6 0.000000000 0.000000000 0.000000000 0.000000000 0.076923077 0.384615385 0.000000000 0.000000000 0.000000000 0.000000000 0.284615385 0.253846154
7 7 0.000000000 0.000000000 0.347826087 0.000000000 0.000000000 0.000000000 0.243478261 0.000000000 0.026086957 0.000000000 0.143478261 0.239130435
8 8 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.024000000 0.004000000 0.000000000 0.460000000 0.000000000 0.224000000 0.288000000
9 9 0.000000000 0.000000000 0.311111111 0.000000000 0.011111111 0.000000000 0.011111111 0.000000000 0.000000000 0.000000000 0.388888889 0.277777778
10 10 0.000000000 0.466666667 0.000000000 0.000000000 0.000000000 0.266666667 0.200000000 0.000000000 0.066666667 0.000000000 0.000000000 0.000000000
11 11 0.000000000 0.153333333 0.006666667 0.000000000 0.000000000 0.826666667 0.000000000 0.013333333 0.000000000 0.000000000 0.000000000 0.000000000
12 12 0.295833333 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.404166667 0.004166667 0.000000000 0.000000000 0.000000000 0.295833333
13 13 0.000000000 0.000000000 0.000000000 0.000000000 0.009090909 0.790909091 0.154545455 0.009090909 0.009090909 0.000000000 0.027272727 0.000000000
14 14 0.000000000 0.155555556 0.000000000 0.000000000 0.000000000 0.033333333 0.033333333 0.011111111 0.000000000 0.533333333 0.011111111 0.222222222
15 15 0.055555556 0.000000000 0.533333333 0.000000000 0.000000000 0.000000000 0.177777778 0.005555556 0.000000000 0.000000000 0.227777778 0.000000000
16 16 0.000000000 0.153333333 0.006666667 0.000000000 0.000000000 0.826666667 0.000000000 0.013333333 0.000000000 0.000000000 0.000000000 0.000000000
17 17 0.295833333 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.404166667 0.004166667 0.000000000 0.000000000 0.000000000 0.295833333
18 18 0.000000000 0.000000000 0.000000000 0.000000000 0.009090909 0.790909091 0.154545455 0.009090909 0.009090909 0.000000000 0.027272727 0.000000000
19 19 0.000000000 0.155555556 0.000000000 0.000000000 0.000000000 0.033333333 0.033333333 0.011111111 0.000000000 0.533333333 0.011111111 0.222222222
20 20 0.055555556 0.000000000 0.533333333 0.000000000 0.000000000 0.000000000 0.177777778 0.005555556 0.000000000 0.000000000 0.227777778 0.000000000
现在,我想知道是否有一种方法可以根据每一列使用top_frac(),这意味着我希望通过每列相同数量的最高概率行收集我的数据的 20%。就像如果整个数据的 20% 是 120,那么我会得到一个矩阵,合并每列的最高 10 个概率。基于单个列很容易做到这一点,但我不知道如何根据每个列按比例进行操作。
【问题讨论】:
-
当您说 20% 的数据时,您是指 20% 的行还是 20% 的单元格?
-
您不能以宽格式保存数据,因为包含最高值的 ID 每列会有所不同(从技术上讲,您可以将其显示为具有很多 NA 的宽格式)。相反,您可以使用 tidyr 收集非 id 列,然后使用 top_n。