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 strong> convertir ces colonnes à leur respective Des indices tels que échantillon code: p> et code similaire pour col5 p> J'ai essayé de chercher approprié fonctionner dans le paquet de lubridate mais n'a pas pu trouver. p> p>
4 Réponses :
Vous pouvez utiliser Correspondance:
dow <- c('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') df$col1 <- match(df$col1, dow)
Merci. Cette solution la plus simple m'a sauvé beaucoup de problèmes.
Même plus simple que la correspondance est ce que nous pouvions appeler "Table de recherche", ou ici simplement un vecteur nommé: de manière programmatique, vous pouvez faire la même chose via un commutateur code> > Déclaration. P> Edit: em> comme demandé. p>
Exemple
p>
Ceci semble être la meilleure solution. Si ce n'est pas clair dow [df $ col1] code> 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
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)
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.
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
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.
Pouvez-vous être plus spécifique avec la sortie que vous souhaitez et un exemple de vos données?