问题描述
我有一个列表列表,其中每个列表都经过排序。我想研究的是某个元素在特定位置出现了多少次,并考虑该值是否与前一个元素显着不同。 (例如在第一个列表中 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,brk = 0.1,ms = 0.114285714285714,wf = 0.114285714285714,bofa = 0.128571428571429
))
table(res <- sapply(degree.l,names),pos = row(res))
另请参阅此问题,了解根据我得到的排序对其进行可靠排名的方法:
Frequency of appearance in list of lists
解决方法
我们遍历命名的 list
('degree.l'),得到 round
ed 向量的等级 dense_rank
,用原始向量名称 {{ 1}} 成两列 data.frame,stack
rbind
元素并获得频率 list
table
-输出
table(do.call(rbind,lapply(degree.l,function(x)
stack(setNames(dplyr::dense_rank(round(x,3)),names(x)))))[2:1])