0
votes

Existe-t-il une fonction R pour trouver l'index des jours de la semaine, par exemple 1 pour le dimanche 2 pour lundi et ainsi de suite?

Deux colonnes [Dites Col1 et Col5] de ma trame de données contenant des jours de la semaine telles que le dimanche, lundi, ....

Je veux convertir ces colonnes à leur respective Des indices tels que '1' "pour" dimanche "2 'pour" lundi ", ..." sur . Actuellement, j'utilise Ifelse mais je crois qu'il pourrait être un moyen efficace de faire la même chose dans R .

échantillon code: xxx

et code similaire pour col5 xxx

J'ai essayé de chercher approprié fonctionner dans le paquet de lubridate mais n'a pas pu trouver.


1 commentaires

Pouvez-vous être plus spécifique avec la sortie que vous souhaitez et un exemple de vos données?


4 Réponses :


2
votes

Vous pouvez utiliser Correspondance:

dow <- c('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
df$col1 <- match(df$col1, dow)


1 commentaires

Merci. Cette solution la plus simple m'a sauvé beaucoup de problèmes.



3
votes

Même plus simple que la correspondance est ce que nous pouvions appeler "Table de recherche", ou ici simplement un vecteur nommé: xxx

de manière programmatique, vous pouvez faire la même chose via un commutateur > Déclaration.

Edit: comme demandé. xxx

Exemple xxx


3 commentaires

Ceci semble être la meilleure solution. Si ce n'est pas clair dow [df $ col1] produirait votre vecteur de colonne.


@Dirk, plus tôt, j'avais essayé le commutateur mais honnêtement parlant n'a pas mis suffisamment d'efforts pour obtenir la sortie souhaitée. Pouvez-vous donner un exemple de code pour la même chose?


@Icecreamtoucan merci pour la solution. De tels conseils économisent beaucoup de temps



1
votes

Réglage des niveaux d'un facteur définit les numéros AS.Numeric Retours.

df= data.frame(col1 = c("Friday", "Monday", "Wednesday"), col5 = c("Tuesday", "Saturday", "Monday"))
df$col1 = factor(df$col1, levels=c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
df$col1 = as.numeric(df$col1)
df$col5 = factor(df$col5, levels=c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
df$col5 = as.numeric(df$col5)


2 commentaires

Merci. La solution est simple. Cependant, je pourrais peut-être changer l'ordre des facteurs


La commande est entièrement basée sur l'ordre du vecteur passé comme des niveaux. Il est trivial de changer.



2
votes

Vous pouvez utiliser Lubridate pour faire ceci:

lubridate::wday(lubridate::today(),
                week_start = 1,
                label = TRUE)
[1] Fr
Levels: Mo < Di < Mi < Do < Fr < Sa < So


4 commentaires

L'OP n'a pas donné de sortie souhaitée claire, mais on dirait qu'ils veulent le nombre du jour de la semaine, pas son abréviation


Il y a aussi une option pour définir ceci: AS.Integer (Lubridate :: Way (Lubridate :: Today_start = 1, Abbr = Faux, Locale = "Anglais", étiquette = true))


abbr = false est le paramètre pour le nom complet


@Florian; Way () de Lubridate a été la première fonction dans mon esprit. J'ai aussi essayé aussi.numeric (Way (DF $ Col1) et AS.Integer (Way (DF $ Col1) mais cela n'a pas fonctionné dans mon cas.