2015-07-15 1 views
0
Date.Trans 
20150623 
20150613 
20150616 
20150611 
20150625 

Salut,Comment obtenir "Différence de date" entre un champ de dates et une date spécifiée?

Je veux calculer la date entre Date.Trans et CONSEILSLa différence 07/07/2015 dans l'ensemble de données nommé « boo » (les différences de jours). Je suis assez nouveau à R et j'ai du mal à convertir la chaîne Date.Trans en une date, puis à calculer la différence en nombre de jours.

ce que je l'ai essayé jusqu'à présent:

strptime(boo$Date.Trans, "%y%m%d") 

ne les convertit pas.

boo$days <- as.Date(boo$Date.Trans, "%Y%m%d") 

Erreur dans charToDate (x): chaîne de caractères ne sont pas dans un format standard sans ambiguïté

S'il vous plaît aider

+0

Essayez 'as.Date (as.character (boo $ Date.Trans),"% Y% m% d ")' – akrun

+0

Vous avez juste besoin d'un Y majuscule "% Y" dans votre premier essai. – JohannesNE

Répondre

1

Le message d'erreur que vous avez affichée indique que votre colonne Date.Trans est de type numérique. S'il s'agissait d'un caractère ou d'un type de facteur, l'appel as.Date() fonctionnerait. Pour un type numérique, vous pouvez obtenir l'exigence en contraignant à caractère premier:

boo <- data.frame(Date.Trans=c(20150623,20150613,20150616,20150611,20150625)); 
as.Date(boo$Date.Trans,'%Y%m%d'); 
## Error in charToDate(x) : 
## character string is not in a standard unambiguous format 
boo$days <- as.Date('2015-07-07') - as.Date(as.character(boo$Date.Trans),'%Y%m%d'); 
boo; 
## Date.Trans days 
## 1 20150623 14 days 
## 2 20150613 24 days 
## 3 20150616 21 days 
## 4 20150611 26 days 
## 5 20150625 12 days 
sapply(boo,class); 
## Date.Trans  days 
## "numeric" "difftime" 

En général, vous devriez essayer de contraindre à des types de données appropriés à partir le plus tôt possible; cela aidera à prévenir ce genre de difficultés. Par exemple, si la définition boo en ligne, vous pouvez le faire:

boo <- data.frame(Date.Trans=as.Date(c('2015-06-23','2015-06-13','2015-06-16','2015-06-11','2015-06-25'))); 
boo; 
## Date.Trans 
## 1 2015-06-23 
## 2 2015-06-13 
## 3 2015-06-16 
## 4 2015-06-11 
## 5 2015-06-25 
class(boo$Date.Trans); 
## [1] "Date" 

Ou, s'il est trop tard, par exemple, si vous lisez dans les données d'un fichier, vous pouvez le corriger après:

boo$Date.Trans <- as.Date(as.character(boo$Date.Trans),'%Y%m%d'); 
boo; 
## Date.Trans 
## 1 2015-06-23 
## 2 2015-06-13 
## 3 2015-06-16 
## 4 2015-06-11 
## 5 2015-06-25 
class(boo$Date.Trans); 
## [1] "Date" 
+0

Le 'as.character (' est vu quelque part :-) – akrun

+0

Merci pour votre réponse rapide @bgoldst. cela fonctionne parfaitement et vous avez économisé beaucoup de mon temps. Merci encore. – Droy