使用Excel或R使用每个单元格中的部分信息对数据进行排序

时间:2014-08-05 21:25:48

标签: r excel sorting

我的数据集如下所示:

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

感谢!!!

1 个答案:

答案 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"