根据列表列表中的显着差异进行排名
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
得到 round
ed 向量的排名,用原始向量名称命名它, stack
分为两列 data.frame、rbind
和 list
元素并得到频率 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
我有一个列表列表,其中每个列表都已排序。我想研究的是某个元素在特定位置出现了多少次,并考虑该值是否与前一个元素有显着差异。 (例如在第一个列表中,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
得到 round
ed 向量的排名,用原始向量名称命名它, stack
分为两列 data.frame、rbind
和 list
元素并得到频率 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