0
votes

Attribuer le numéro à chaque date unique en r

J'ai une colonne avec les valeurs de date. J'essaie de marquer la date la plus récente que 1 et le plus récent - avant 2 heures et ainsi de suite.
Ici, j'utilise dplyr pour y aller, mais après avoir exécuté le code, je reçois le résultat constant, car "1" xxx

La sortie que je recherche est aussi ci-dessous : xxx

merci d'avance.

r

0 commentaires

3 Réponses :


0
votes

Pour résoudre le problème, convertissez les dates en une représentation entière, puis soustrayez le maximum. Soustraire 1L code> ajuste pour les valeurs de la sortie attendue. Puis convertir en valeurs absolues.

df$day_no <- abs(as.integer(df$date) - max(as.integer(df$date)) - 1L)
df
#        date day_no
#1 2020-01-20      5
#2 2020-01-21      4
#3 2020-01-22      3
#4 2020-01-23      2
#5 2020-01-24      1


1 commentaires

Sinon, vous pouvez le transformer en un facteur, puis utiliser la représentation numérique du facteur. Date <- C ("2020-01-20", "2020-01-19", "2020-01-21" , "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-22") AS.numérique (facteur (date) )



2
votes

Autre moyen consiste à utiliser xxx_rank dans dplyr ou Rank dans la base r. xxx

vient de choisir celui qui fonctionne pour votre jeu de données.


3 commentaires

@Chrisruehlemann désolé je devrais indiquer clairement. Je veux dire qu'il existe de nombreuses variantes dans dplyr comme dense_rank , min_rank


Si j'étais un débutant avec R, xxx_rank serait totalement trompeur. En outre, vous mentionnez rang mais vous ne montrez pas comment l'utiliser.


Soyez prudent avec le rang si vous pouvez avoir des dates plus d'une fois dans vos données par exemple. date <- C ("2020-01-20", "2020-01-19", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-22") . Je pense que transformer le facteur est plus robuste dans de telles situations.



1
votes

dans la base r, utilisez class : xxx

alternativement, si vous avez besoin de classement inversé, ajoutez - et convertissez des dates en numériques : xxx


0 commentaires