根据R中的排序顺序对日期列表进行排序并对其他列表进行排序

时间:2020-01-16 12:32:59

标签: r

我有一个日期顺序不正确的列表:“ 1-12-2019”“ 17-11-2019”“ 18-11-2019”

除了日期列表之外,我还获得了相应值的列表:2 3 2

我想按升序对日期列表进行排序。然后按照日期列表的排序顺序,我要对值列表进行排序。

例如:

当前情况:

  • datesLst:“ 1-12-2019”“ 17-11-2019”“ 18-11-2019”
  • valuesLst:2 3 2

想要的情况:

  • datesLst:“ 17-11-2019”“ 18-11-2019”“ 1-12-2019”
  • valuesLst:3 2 2

如果能得到帮助,将不胜感激。

2 个答案:

答案 0 :(得分:3)

您只需要对日期进行排序并将其用作索引来对值进行排序,即

colors = {0: (0.6, 0.8, 0.8, 1), 1: (1, 0.9, 0.4, 1)}
#converts grba to integers
c1 = {k: (int(r * 255),int(g * 255),int(b * 255), a) for k, (r,g,b,a) in colors.items()}
c2 = {k: (int(r * 255),int(g * 255),int(b * 255), 0.25) for k, (r,g,b,a) in colors.items()}

#get values of first level of MulitIndex
idx = df.index.get_level_values(0)
#set css for first level
css = [{'selector': f'.row{i}.level0', 
        'props': [('background-color', f'rgba{c1[j]}')]} for i,j in enumerate(idx)]
#counter per first level for pair and unpair coloring
zipped = zip(df.groupby(idx).cumcount(), enumerate(idx))

css1 = [{'selector': f'.row{i}', 'props': [('background-color', f'rgba{c1[j]}')]} 
       if v % 2 == 0 
       else {'selector': f'.row{i}', 'props': [('background-color', f'rgba{c2[j]}')]} 
       for v,(i, j) in zipped]


df.style.set_table_styles(css1 + css)

答案 1 :(得分:0)

也许您可以尝试以下代码

res <- as.numeric(names(sort(setNames(as.Date(s, format = '%d-%m-%Y'),c(2,3,2)))))

这样

> res
[1] 3 2 2

数据

s <- c("17-11-2019", "18-11-2019", "1-12-2019")