2016-07-23 1 views
0

J'ai une variable dans ma trame de données pour le jour de la semaine. R reconnaît cela comme un facteur, mais y a-t-il déjà un format spécifique pour le jour de la semaine que je peux utiliser à la place? J'ai lu des questions sur la génération d'un jour de la semaine, ou en spécifiant le jour d'une semaine pour une date que vous avez déjà; Cependant, je n'ai rien lu sur le changement du format d'une variable que vous avez déjà dans le jour de la semaine.Mise en forme des jours de la semaine dans R

Cela ne sera probablement pas pertinent pour mes recherches; mais, je me sentirais mieux aller de l'avant si elle était correctement formatée. Je ne peux pas voir où cela arriverait; mais, si le séquençage est devenu un problème, R séquence la variable factorielle dans l'ordre alphabétique (vendredi, lundi, samedi, etc.) où, de toute évidence, l'ordre chronologique (dimanche, lundi, mardi, etc.) serait souhaitable.

Voici ce que j'ai essayé:

dayx = as.Date(g.2015.1990$DAY.OF.WEEK, format = "%A") 
dayx = as.Date(as.character(g.2015.1990$DAY.OF.WEEK), format = "%A") 
dayx = strptime(g.2015.1990$DAY.OF.WEEK, format = "%A") 
dayx = strftime(as.character(g.2015.1990$DAY.OF.WEEK, format = "%A")) 
dayx = strptime(g.2015.1990$DAY.OF.WEEK, format = "%a") 
dayx = as.Date(g.2015.1990$DAY.OF.WEEK, format = "%a") 
dayx = as.Date(as.character(g.2015.1990$DAY.OF.WEEK), format = "%a") 
dayx = strftime(as.character(g.2015.1990$DAY.OF.WEEK, format = "%a")) 
dayx = strptime(sprintf('%s %04d', g.2015.1990$DATE, g.2015.1990$START.TIME, g.2015.1990$DAY.OF.WEEK), '%Y-%m-%d %H%M %a') 

Chacun semble remplacer simplement chaque observation avec la date d'aujourd'hui:

> dayx = as.Date(g.2015.1990$DAY.OF.WEEK, format = "%A") 
> dayx[1:25] 
[1] "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" 
[6] "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" 
[11] "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" 
[16] "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" 
[21] "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" "2016-07-23" 

Toute aide est appréciée!

+1

Vous pouvez décider manuellement l'ordre des facteurs d'une variable, ne serait-ce pas pour toi? – thepule

Répondre

1

Je pense que cela est pertinent:

## This is the order you desire 
Weekdays <- c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") 

## This simulates your `g.2015.1990$DAY.OF.WEEK` 
set.seed(0); test <- factor(sample(Weekdays, 100, replace = TRUE)) 

## This simulates what you see from `str(g.2015.1990$DAY.OF.WEEK)` 
str(test) 
# Factor w/ 7 levels "Friday","Monday",..: 3 2 6 5 3 2 3 3 5 5 ... 

## We can inspect levels 
levels(test) 
#[1] "Friday" "Monday" "Saturday" "Sunday" "Thursday" "Tuesday" 
#[7] "Wednesday" 

## This is what you should do to recode `test` for your desired order of levels 
tmp <- levels(test)[as.integer(test)] ## much more efficient than `tmp <- as.character(test)` 
test <- factor(tmp, levels = Weekdays) ## set levels when using `factor()` 

## This is what we see now 
str(test) 
# Factor w/ 7 levels "Sunday","Monday",..: 7 2 3 5 7 2 7 7 5 5 ... 

levels(test) 
# [1] "Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" 
# [7] "Saturday" 

Alors, tout à fait, essayez:

Weekdays <- c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") 
tmp <- levels(g.2015.1990$DAY.OF.WEEK)[as.integer(g.2015.1990$DAY.OF.WEEK)] 
## use `Weekdays` defined above 
g.2015.1990$DAY.OF.WEEK <- factor(tmp, levels = Weekdays)