1
votes

Trier par dates et valeur R

J'ai ce dataframe:

  id value       Date
2  2   300 2020-02-17
5  5   270 2020-02-17
4  4   430 2019-10-24
3  3    NA 2019-10-24
1  1   100 2018-02-01

Tout ce que je veux, c'est trier la valeur de Date et valeur dans l'ordre décroissant. Cependant, je trouve que la date peut être commandée en utilisant rev mais avec NA la commande n'est pas correcte:

df[rev(order(df$Date, df$value)),] ##

Le résultat que je veux devrait être comme ceci:

a <- c(1,2,3,4,5)
b <- c(100, 300, NA, 430, 270)
c <- c('2018-02-01', '2020-02-17', '2019-10-24', '2019-10-24', '2020-02-17')
df <- data.frame(a,b,c)
names(df) <- c('id', "value", "Date")

Toute suggestion de traiter NA dans ce cadre de données sans le laisser tomber.


0 commentaires

3 Réponses :


2
votes

Utiliser na.last = FALSE devrait faire l'affaire:

df[rev(order(df$Date, df$value, na.last = FALSE)),] 


0 commentaires

3
votes

vous pouvez essayer les fonctions dplyr , car arrange () trie les valeurs NA pour qu'elles durent par défaut:

  id value       Date
1  2   300 2020-02-17
2  5   270 2020-02-17
3  4   430 2019-10-24
4  3    NA 2019-10-24
5  1   100 2018-02-01

donne :

df %>%
  arrange(desc(Date),desc(value))


0 commentaires

1
votes

Si vous souhaitez utiliser le package data.table, vous pouvez le faire comme ceci:

library(data.table)
setorderv(df, cols = c("Date","value"), order = -1, na.last=TRUE)


0 commentaires