【发布时间】:2020-06-29 03:23:07
【问题描述】:
我有一个矩阵列表,我需要对它们的行名进行排序。我有 7 个字母评级类别,但行名是由连字符分隔的两个评级的组合。我希望根据连字符前的评级对行名进行排序。解决此问题后,我想将 NaN 值和 0 值转换为 1,因为我必须记录矩阵中每个元素的日志。但是,当我将 NaN 替换为 1,然后继续将 0 值替换为 1 时,NaN 值会再次出现。
对象 row.order 包含我要遵循的顺序。
row.order <- c("Aaa", "Aa", "A", "Baa", "Ba", "B", "Caa")
矩阵列表的输出:
dput(phij.list)
list(structure(c(0.375, 0.268292682926829, 0.384615384615385,
NaN, NaN, 0.222222222222222, NaN, 0.4375, 0.51219512195122, 0.282051282051282,
NaN, NaN, 0.444444444444444, NaN, 0.0625, 0.195121951219512,
0.230769230769231, NaN, NaN, 0.333333333333333, NaN, 0.125, 0.024390243902439,
0.0769230769230769, NaN, NaN, 0, NaN, 0, 0, 0.0256410256410256,
NaN, NaN, 0, NaN, 0, 0, 0, NaN, NaN, 0, NaN, 0, 0, 0, NaN, NaN,
0, NaN), .Dim = c(7L, 7L), .Dimnames = list(hi = c("A-Aaa", "Aa-Aaa",
"Aaa-Aaa", "B-Aaa", "Ba-Aaa", "Baa-Aaa", "Caa-Aaa"), j = c("Aaa",
"Aa", "A", "Baa", "Ba", "B", "Caa"))), structure(c(0.0425531914893617,
0.0641509433962264, 0.27906976744186, 0.0714285714285714, 0,
0.0625, 0, 0.425531914893617, 0.532075471698113, 0.418604651162791,
0.428571428571429, 0.551724137931034, 0.453125, 0, 0.304964539007092,
0.211320754716981, 0.162790697674419, 0.214285714285714, 0.275862068965517,
0.25, 0, 0.113475177304965, 0.132075471698113, 0.116279069767442,
0.142857142857143, 0.137931034482759, 0.140625, 0, 0.0921985815602837,
0.0452830188679245, 0.0232558139534884, 0.142857142857143, 0,
0.0625, 1, 0.0212765957446809, 0.0150943396226415, 0, 0, 0.0344827586206897,
0.03125, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(7L, 7L), .Dimnames = list(
hi = c("A-Aa", "Aa-Aa", "Aaa-Aa", "B-Aa", "Ba-Aa", "Baa-Aa",
"Caa-Aa"), j = c("Aaa", "Aa", "A", "Baa", "Ba", "B", "Caa"
))), structure(c(0.00769230769230769, 0.0775193798449612,
0.0869565217391304, 0, 0, 0.00671140939597315, 0, 0.188461538461538,
0.317829457364341, 0.173913043478261, 0.296296296296296, 0.037037037037037,
0.23489932885906, 0.5, 0.496153846153846, 0.341085271317829,
0.478260869565217, 0.333333333333333, 0.462962962962963, 0.342281879194631,
0, 0.207692307692308, 0.193798449612403, 0.260869565217391, 0.222222222222222,
0.333333333333333, 0.281879194630872, 0.5, 0.0884615384615385,
0.062015503875969, 0, 0.111111111111111, 0.111111111111111, 0.087248322147651,
0, 0.00384615384615385, 0.00775193798449612, 0, 0.037037037037037,
0.0555555555555556, 0.0402684563758389, 0, 0.00769230769230769,
0, 0, 0, 0, 0.00671140939597315, 0), .Dim = c(7L, 7L), .Dimnames = list(
hi = c("A-A", "Aa-A", "Aaa-A", "B-A", "Ba-A", "Baa-A", "Caa-A"
), j = c("Aaa", "Aa", "A", "Baa", "Ba", "B", "Caa"))), structure(c(0.0196078431372549,
0.0434782608695652, 0.166666666666667, 0, 0, 0.0116959064327485,
0, 0.163398692810458, 0.159420289855072, 0.666666666666667, 0.0571428571428571,
0.0648148148148148, 0.0994152046783626, 0, 0.300653594771242,
0.347826086956522, 0.166666666666667, 0.285714285714286, 0.222222222222222,
0.251461988304094, 0.333333333333333, 0.274509803921569, 0.260869565217391,
0, 0.314285714285714, 0.37037037037037, 0.350877192982456, 0.333333333333333,
0.163398692810458, 0.130434782608696, 0, 0.228571428571429, 0.194444444444444,
0.233918128654971, 0.333333333333333, 0.065359477124183, 0.0579710144927536,
0, 0.114285714285714, 0.12037037037037, 0.0526315789473684, 0,
0.0130718954248366, 0, 0, 0, 0.0277777777777778, 0, 0), .Dim = c(7L,
7L), .Dimnames = list(hi = c("A-Baa", "Aa-Baa", "Aaa-Baa", "B-Baa",
"Ba-Baa", "Baa-Baa", "Caa-Baa"), j = c("Aaa", "Aa", "A", "Baa",
"Ba", "B", "Caa"))), structure(c(0, 0, 0, 0, 0, 0, 0, 0.150943396226415,
0.212121212121212, 1, 0.02, 0.0285714285714286, 0.0925925925925926,
0, 0.264150943396226, 0.272727272727273, 0, 0.06, 0.104761904761905,
0.138888888888889, 0.214285714285714, 0.415094339622642, 0.212121212121212,
0, 0.12, 0.238095238095238, 0.333333333333333, 0.0714285714285714,
0.0754716981132075, 0.272727272727273, 0, 0.4, 0.333333333333333,
0.305555555555556, 0.214285714285714, 0.0754716981132075, 0,
0, 0.36, 0.247619047619048, 0.101851851851852, 0.357142857142857,
0.0188679245283019, 0.0303030303030303, 0, 0.04, 0.0476190476190476,
0.0277777777777778, 0.142857142857143), .Dim = c(7L, 7L), .Dimnames = list(
hi = c("A-Ba", "Aa-Ba", "Aaa-Ba", "B-Ba", "Ba-Ba", "Baa-Ba",
"Caa-Ba"), j = c("Aaa", "Aa", "A", "Baa", "Ba", "B", "Caa"
))), structure(c(0, 0, NaN, 0, 0, 0, 0, 0, 0.2, NaN, 0.0508474576271186,
0.0476190476190476, 0.128205128205128, 0.0476190476190476, 0.25,
0.2, NaN, 0.101694915254237, 0.142857142857143, 0.179487179487179,
0, 0.333333333333333, 0.4, NaN, 0.0677966101694915, 0.174603174603175,
0.230769230769231, 0.0952380952380952, 0.25, 0.2, NaN, 0.271186440677966,
0.238095238095238, 0.256410256410256, 0.19047619047619, 0.166666666666667,
0, NaN, 0.355932203389831, 0.285714285714286, 0.153846153846154,
0.523809523809524, 0, 0, NaN, 0.152542372881356, 0.111111111111111,
0.0512820512820513, 0.142857142857143), .Dim = c(7L, 7L), .Dimnames = list(
hi = c("A-B", "Aa-B", "Aaa-B", "B-B", "Ba-B", "Baa-B", "Caa-B"
), j = c("Aaa", "Aa", "A", "Baa", "Ba", "B", "Caa"))), structure(c(0,
NaN, NaN, 0, 0, 0, 0, 0, NaN, NaN, 0, 0, 0.142857142857143, 0,
0, NaN, NaN, 0, 0.142857142857143, 0, 0, 0.333333333333333, NaN,
NaN, 0.0526315789473684, 0.214285714285714, 0, 0.0666666666666667,
0.666666666666667, NaN, NaN, 0.263157894736842, 0.142857142857143,
0.428571428571429, 0.0666666666666667, 0, NaN, NaN, 0.473684210526316,
0.214285714285714, 0.285714285714286, 0.466666666666667, 0, NaN,
NaN, 0.210526315789474, 0.285714285714286, 0.142857142857143,
0.4), .Dim = c(7L, 7L), .Dimnames = list(hi = c("A-Caa", "Aa-Caa",
"Aaa-Caa", "B-Caa", "Ba-Caa", "Baa-Caa", "Caa-Caa"), j = c("Aaa",
"Aa", "A", "Baa", "Ba", "B", "Caa"))))
我用来将 NaN 更改为 1 的代码:
lapply(phij.list, function(x) replace(x, !is.finite(x), 1))
我用来将 0 值更改为 1 的代码
lapply(phij.list, function(x) replace(x, x==0, 1))
【问题讨论】: