Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择R中每列的顶部值_R_Matrix_Dplyr - Fatal编程技术网

选择R中每列的顶部值

选择R中每列的顶部值,r,matrix,dplyr,R,Matrix,Dplyr,这可能是一个基本的问题,但我还没有找到一个适合我的需要,即使有很多相似的 我试图从每列中选择前3个值(将行号保留为id),但我无法为它找到正确的函数 我有一个类似于Begging的矩阵,使用该代码添加id列 top_probs <- doc_topic_distr %>% magrittr::set_rownames(seq_len(nrow(.))) %>% as_tibble(rownames = "id") id V1

这可能是一个基本的问题,但我还没有找到一个适合我的需要,即使有很多相似的

我试图从每列中选择前3个值(将行号保留为id),但我无法为它找到正确的函数

我有一个类似于Begging的矩阵,使用该代码添加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\u probs%
magrittr::设置行名(序号(nrow)())%>%
不可用(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\u frac()
,也就是说,我想要20%的数据通过每列相同数量的最高概率行收集。比如,如果整个数据的20%是120,那么我会得到一个矩阵,将每列的最高10个概率合并在一起。基于一个列来做这件事很容易,但我不知道如何基于每个列按比例来做

从上面往下看,可能是这样的:

df %>%
  gather(column, value, -id) %>%
  group_by(id, column) %>%
  top_n(3)

当你说20%的数据时,你是指20%的行还是20%的单元格?你不能以宽格式保存数据,因为包含顶级值的ID在每列中会有所不同(从技术上讲,你可以用大量NAs将其显示为宽格式)。相反,您可以使用tidyr收集非id列,然后使用top\u n。作为一个很好的指南,最终使用此
size%作为可编辑(rownames=“id”)%%>%pivot\u更长(cols=-id,names\u to=“Topic”,values\u to=“Prob”)%%group\u by(Topic)%%>%top\n(size=size,replace=FALSE)%%(主题,问题)
并将其与初始矩阵合并,这样我就不会丢失其他问题。