我的数据集如下所示:
S(3): 99.5 S(4): 7.0 S(5): 42.9 S(6): 42.9 S(7): 6.6 S(9): 1.1 S(13): 0.0
S(1): 49.7 S(3): 49.7 S(5): 0.5 S(11): 0.2 S(14): 16.4
S(1): 17.4 S(3): 65.2 S(5): 17.4 S(11): 0.2 S(14): 6.5 T(15): 86.7
S(1): 0.0 S(3): 100.0
S(1): 50.0 S(3): 50.0 T(7): 0.0 T(10): 0.0 S(19): 0.0 S(21): 0.0
我想将此作为冒号后的值的降序排列。例如,对于第一行:
S(3): 99.5 S(5): 42.9 S(6): 42.9 S(4): 7.0 S(7): 6.6 S(9): 1.1 S(13): 0.0
如果我想为每一行重新排序这样的数据,我该如何使用Excel或R? 或者如果它变得复杂,我可以要求在每一行中提取3个最高值吗?例如,对于第一行,它将是:
S(3): 99.5 S(5): 42.9 S(6): 42.9
感谢!!!
答案 0 :(得分:2)
以下是在R中执行此操作的方法:
v <- readLines(n = 5)
S(3): 99.5 S(4): 7.0 S(5): 42.9 S(6): 42.9 S(7): 6.6 S(9): 1.1 S(13): 0.0
S(1): 49.7 S(3): 49.7 S(5): 0.5 S(11): 0.2 S(14): 16.4
S(1): 17.4 S(3): 65.2 S(5): 17.4 S(11): 0.2 S(14): 6.5 T(15): 86.7
S(1): 0.0 S(3): 100.0
S(1): 50.0 S(3): 50.0 T(7): 0.0 T(10): 0.0 S(19): 0.0 S(21): 0.0
(l <- lapply(strsplit(v, "\\s{2,}"), function(x) {
x[order(-as.numeric(sub("[A-Z]\\(\\d+\\): ([0-9.]+)", "\\1", x)))]
}))
# [[1]]
# [1] "S(3): 99.5" "S(5): 42.9" "S(6): 42.9" "S(4): 7.0" "S(7): 6.6" "S(9): 1.1" "S(13): 0.0"
#
# [[2]]
# [1] "S(1): 49.7" "S(3): 49.7" "S(14): 16.4" "S(5): 0.5" "S(11): 0.2"
#
# [[3]]
# [1] "T(15): 86.7" "S(3): 65.2" "S(1): 17.4" "S(5): 17.4" "S(14): 6.5" "S(11): 0.2"
#
# [[4]]
# [1] "S(3): 100.0" "S(1): 0.0"
#
# [[5]]
# [1] "S(1): 50.0" "S(3): 50.0" "T(7): 0.0" "T(10): 0.0" "S(19): 0.0" "S(21): 0.0"
sapply(l, paste, collapse = " ")
# [1] "S(3): 99.5 S(5): 42.9 S(6): 42.9 S(4): 7.0 S(7): 6.6 S(9): 1.1 S(13): 0.0"
# [2] "S(1): 49.7 S(3): 49.7 S(14): 16.4 S(5): 0.5 S(11): 0.2"
# [3] "T(15): 86.7 S(3): 65.2 S(1): 17.4 S(5): 17.4 S(14): 6.5 S(11): 0.2"
# [4] "S(3): 100.0 S(1): 0.0"
# [5] "S(1): 50.0 S(3): 50.0 T(7): 0.0 T(10): 0.0 S(19): 0.0 S(21): 0.0"