R根据值排列行

时间:2016-04-05 12:37:31

标签: r sorting dplyr rank

我想在数据框中订购行。我尝试过使用顺序,排序,排名和排列(dplyr),但我找不到合适的脚本。我没有给出我尝试过的脚本,因为它没有用。

我的数据框(ldd)示例:

    days      HDP      CHP      AKP      MHP
   (int)    (dbl)    (dbl)    (dbl)    (dbl)
      1 4901.000 898.0000 12299.00 5394.000
      2 5395.000 646.0000 75309.00 5638.000

期望的结果:

    days      HDP      CHP      AKP      MHP
   (int)    (dbl)    (dbl)    (dbl)    (dbl)
     1        3        4        1        2
     2        2        4        1        3

感谢您的建议。

ldd数据框:

structure(list(days = 1:31, HDP = c(4901, 5395, 5368, 4858, 4424, 
3927.83333333333, 3652.85714285714, 3358.75, 3171.22222222222, 
2995.6, 3136.45454545455, 3493, 3710.38461538462, 3989.78571428571, 
4143.8, 4413.8125, 4887.47058823529, 4979.16666666667, 5124.31578947368, 
5280.3, 5461.66666666667, 5498.68181818182, 5685.86956521739, 
5805.25, 5803.56, 5838.53846153846, 6024.14814814815, 6333.03571428571, 
7081.13793103448, 7510.3, 8995), CHP = c(898, 646, 557.333333333333, 
586.75, 674.6, 696.5, 698.285714285714, 665.75, 642.222222222222, 
737.2, 897.909090909091, 1231.08333333333, 1593.30769230769, 
5747.78571428571, 6058.46666666667, 5997.0625, 5874.35294117647, 
5817, 5919.73684210526, 5902, 5821.19047619048, 5732.04545454545, 
5760.39130434783, 5783.83333333333, 5777.76, 5762.84615384615, 
5781.14814814815, 5819.25, 5838.75862068965, 5901.4, 6234.09677419355
), AKP = c(12299, 75309, 86964.3333333333, 67210.25, 54871, 47262, 
41899.7142857143, 37116.5, 33301.7777777778, 31218.7, 28921.1818181818, 
27059.3333333333, 25469.5384615385, 24323.2857142857, 23491, 
22451.5625, 21454.5882352941, 20912.8888888889, 20218.4736842105, 
19527.1, 18988.619047619, 18404.2727272727, 17740.5217391304, 
17223.75, 17383.64, 20412.1153846154, 20907.037037037, 22194.9642857143, 
23105.4482758621, 23493.1666666667, 23399.0322580645), MHP = c(5394, 
5638, 5261.33333333333, 4614.75, 5017.6, 4976.16666666667, 4887, 
4537.125, 4417.22222222222, 4655.4, 4727, 4817.41666666667, 4892.84615384615, 
4974.14285714286, 5002.06666666667, 5188.5, 5410.23529411765, 
5510.61111111111, 5700.52631578947, 5725.6, 5800.52380952381, 
5765.09090909091, 5780.95652173913, 5935.33333333333, 5939.76, 
6049.30769230769, 6166.37037037037, 6256.32142857143, 6381, 6625.03333333333, 
6848.90322580645)), .Names = c("days", "HDP", "CHP", "AKP", "MHP"
), class = c("tbl_df", "data.frame"), row.names = c(NA, -31L))

1 个答案:

答案 0 :(得分:1)

您可以尝试使用rank

t(apply(df[-1], 1, function(x) rank(-x)))


#      HDP CHP AKP MHP
#[1,]    3   4   1   2
#[2,]    3   4   1   2
#[3,]    2   4   1   3
#[4,]    2   4   1   3
#[5,]    3   4   1   2
#[6,]    3   4   1   2
#[7,]    3   4   1   2
#[8,]    3   4   1   2
#[9,]    3   4   1   2
#[10,]   3   4   1   2
#[11,]   3   4   1   2
#[12,]   3   4   1   2
#[13,]   3   4   1   2
#[14,]   4   2   1   3
#[15,]   4   2   1   3
#[16,]   4   2   1   3
#[17,]   4   2   1   3
#[18,]   4   2   1   3
#[19,]   4   2   1   3
#[20,]   4   2   1   3
#[21,]   4   2   1   3
#[22,]   4   3   1   2
#[23,]   4   3   1   2
#[24,]   3   4   1   2
#[25,]   3   4   1   2
#[26,]   3   4   1   2
#[27,]   3   4   1   2
#[28,]   2   4   1   3
#[29,]   2   4   1   3
#[30,]   2   4   1   3
#[31,]   2   4   1   3