2012-11-05 9 views
8

Ho un dataframe corrente che assomiglia a questo:Come sostituire date numeriche con i nomi dei mesi per una colonna in R

 DATETIME MEAS_AVG TARG_MIN TARG_AVG TARG_MAX DESPORT_NOTE 
1 2012/04/10 14:03:37 0.2888  0.22  0.25  0.27  GOOD_PT 
2 2012/03/30 07:48:17 0.2544  0.22  0.25  0.27  GOOD_PT 
3 2012/03/24 19:23:08 0.2333  0.22  0.25  0.27  GOOD_PT 
4 2012/03/25 16:10:17 0.2111  0.22  0.25  0.27  GOOD_PT 
5 2012/04/10 00:58:29 0.2222  0.22  0.25  0.27  GOOD_PT 
6 2012/04/14 18:32:52 0.2888  0.22  0.25  0.27  GOOD_PT 
7 2012/04/21 14:47:47 0.2777  0.22  0.25  0.27  GOOD_PT 

La cornice di dati si chiama df3 e la colonna specifica Sto cercando di sostituire le date per sono df3$DATETIME.

Ho questa funzione nel mio codice già al fine di striscia la datetime:

date <- strptime(df3$DATETIME, "%Y/%m/%d %H:%M:%S") 

Tutto quello che sto cercando di sostituire tutte le informazioni datetime con semplici nomi dei mesi. Questo è quello che dovrebbe essere simile dopo la funzione di sostituzione:

 DATETIME MEAS_AVG TARG_MIN TARG_AVG TARG_MAX DESPORT_NOTE 
1 April 0.2888  0.22  0.25  0.27  GOOD_PT 
2 March 0.2544  0.22  0.25  0.27  GOOD_PT 
3 March 0.2333  0.22  0.25  0.27  GOOD_PT 
4 March 0.2111  0.22  0.25  0.27  GOOD_PT 
5 April 0.2222  0.22  0.25  0.27  GOOD_PT 
6 April 0.2888  0.22  0.25  0.27  GOOD_PT 
7 April 0.2777  0.22  0.25  0.27  GOOD_PT 

Sto cercato dappertutto per una semplice sostituzione funzione di colonna, ma non riesco a trovarlo. So che posso utilizzare la funzione as.Date() con il formato %B per restituire il mese non registrato. L'unico problema è che non so come usarlo per sostituire i valori delle colonne già esistenti.

posso elencare i mesi di utilizzare questa funzione:

list(month=months(as.Date(df3$DATETIME))) 

risposta

17
df3$DATETIME <- months(as.Date(df3$DATETIME)) 
+0

Grazie ... ero così vicino. – Jonny

+1

solo un piccolo passo avanti ... – seancarmody

2

Piuttosto che sostituire una colonna, è possibile sovrascrivere i dati in quella indesiderata (e rinominarlo se volete).

E per convertire i dati, vorrei utilizzare mese() insieme a YMD(), sia dal pacchetto lubridate:

#install and load lubridate if not already done 
install.packages("lubridate",repos="http://cran.us.r-project.org") 
library(lubridate) 

#transform data to month names 
df3$DATETIME <-month(ymd(df3$DATETIME), label = TRUE, abbr = FALSE) 

#rename if desired 
names(df3)[which(names(df3)=="DATETIME")]<-"MONTH" 

Addendum: Il motivo per cui propongo le funzioni lubridate piuttosto che months() dalla base R è che months() restituisce char classe, mentre lubridate di month() restituisce un fattore ordinata, che può essere utile:

> #base function 
> m2=months(as.Date("08/12/1990")) 
> m1=months(as.Date("07/12/1990")) 
> m1<m2 
[1] FALSE 
> 
> #lubridate 
> m2=month(mdy("08/12/1990"),label=TRUE, abbr=FALSE) 
1 parsed with %m/%d/%Y 
> m1=month(mdy("07/12/1990"),label=TRUE, abbr=FALSE) 
1 parsed with %m/%d/%Y 
> m1<m2 
[1] TRUE 
> m1 
[1] July 
12 Levels: January < February < March < April < May < June < ... < December 
> str(m1) 
Ord.factor w/ 12 levels "January"<"February"<..: 7 
+0

c'è un modo per estrarre mese e anno dal formato y-m-d ad esempio, abbiamo 2016-10-01 e vogliamo 2016-Ott – urwaCFC

Problemi correlati