根据列表列表中的显着差异进行排名

Ranking based on significant difference in list of lists

我有一个列表列表,其中每个列表都已排序。我想研究的是某个元素在特定位置出现了多少次,并考虑该值是否与前一个元素有显着差异。 (例如在第一个列表中,gs、ms、bofa 和 citi 具有相同的值,但它们的排名不同)。我意识到排名的长度不会相同,因为每个列表的元素都不同。我怎样才能以正确的方式执行此操作并以体面的方式显示结果?

到目前为止,我根据排序函数输出进行可靠排名:

dput(degree.l)
list(c(schwab = 0, pnc = 0.0344827586206897, jpm = 0.0862068965517241, 
amex = 0.0862068965517241, gs = 0.103448275862069, ms = 0.103448275862069, 
bofa = 0.103448275862069, citi = 0.103448275862069, wf = 0.120689655172414, 
spgl = 0.120689655172414, brk = 0.137931034482759), c(schwab = 0.0166666666666667, 
pnc = 0.05, ms = 0.0666666666666667, spgl = 0.0833333333333333, 
jpm = 0.1, bofa = 0.1, wf = 0.1, amex = 0.1, gs = 0.116666666666667, 
brk = 0.116666666666667, citi = 0.15), c(schwab = 0.0428571428571429, 
gs = 0.0714285714285714, pnc = 0.0714285714285714, citi = 0.0857142857142857, 
amex = 0.0857142857142857, spgl = 0.0857142857142857, jpm = 0.1, 
brk = 0.1, ms = 0.114285714285714, wf = 0.114285714285714, bofa = 0.128571428571429
))

table(res <- sapply(degree.l, names), pos = row(res))

另请参阅此问题,了解如何根据我得到的排序对其进行可靠排名:

我们遍历命名的 list ('degree.l'),用 dense_rank 得到 rounded 向量的排名,用原始向量名称命名它, stack 分为两列 data.frame、rbindlist 元素并得到频率 table

table(do.call(rbind, lapply(degree.l, function(x) 
    stack(setNames(dplyr::dense_rank(round(x, 3)), names(x)))))[2:1])

-输出

       values
ind      1 2 3 4 5 6 7
  schwab 3 0 0 0 0 0 0
  pnc    0 3 0 0 0 0 0
  jpm    0 0 1 1 1 0 0
  amex   0 0 2 0 1 0 0
  gs     0 1 0 1 0 1 0
  ms     0 0 1 1 1 0 0
  bofa   0 0 0 1 1 1 0
  citi   0 0 1 1 0 0 1
  wf     0 0 0 0 3 0 0
  spgl   0 0 1 1 1 0 0
  brk    0 0 0 1 0 2 0