2012-11-05 7 views
8

mam aktualny DataFrame, który wygląda tak:Jak zastąpić termin numerycznych z nazwami miesięcy dla kolumny w 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 

ramka danych jest nazywany df3 oraz konkretną kolumnę szukam zastąpić daty dla są df3$DATETIME.

mam tej funkcji w moim kodu już w celu odebranie datetime:

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

Wszystko szukam zastąpić wszystkie datetime informacji z prostych nazw miesięcy. To jest to, co powinno wyglądać po funkcji Replace:

 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 

Mam był patrząc na całym prosty zastąpić funkcję kolumnową, ale nie wydaje się go znaleźć. Wiem, że mogę użyć funkcji as.Date() z sformatowanym %B, aby zwrócić nieokreślony miesiąc. Jedynym problemem jest to, że nie wiem jak tego użyć, aby zastąpić już istniejące wartości kolumn.

mogę wymienić miesiące korzystania z tej funkcji:

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

Odpowiedz

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

Dzięki ... byłem tak blisko. – Jonny

+1

tylko jeden mały krok do przodu ... – seancarmody

2

Zamiast wymienić kolumnę można nadpisać dane w niechcianej jeden (i zmienić jego nazwę, jeśli chcesz).

I do konwersji danych, użyłbym miesiąc() wraz z YMD(), zarówno z pakietu 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" 

Uzupełnienie: Powodem Proponuję funkcje lubridate zamiast months() z bazą R że months() powraca char klasę podczas lubridate na month() zwraca uporządkowaną czynnik, który może być przydatny:

> #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

czy istnieje sposób na wyodrębnienie miesiąca i roku z formatu Y-m- np. Mamy 2016-10-01 i chcemy, aby 2016-październik – urwaCFC

Powiązane problemy