22

私は次のような現在のDataFrameを持っています:

      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

データフレームが呼び出されdf3、日付を置き換えるために探している特定の列はですdf3$DATETIME

日時を削除するために、コードにこの関数がすでに含まれています。

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

すべての日時情報を単純な月の名前に置き換えたいと思っています。これは、置換関数の後のようになります。

      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

単純な列置換関数を探していましたが、見つからないようです。as.Date()フォーマットされた関数を使用し%Bて、省略されていない月を返すことができることを知っています。唯一の問題は、これを使用して既存の列の値を置き換える方法がわからないことです。

この関数を使用して月を一覧表示できます。

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

2 に答える 2

31
df3$DATETIME <- months(as.Date(df3$DATETIME))
于 2012-11-05T20:26:39.833 に答える
9

列を置き換えるのではなく、不要な列のデータを上書きできます(必要に応じて名前を変更できます)。

そして、データを変換するために、私はymd()と一緒にmonth()を使用します。どちらも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"

months()補遺:ベースRからではなくlubridate関数を提案する理由は、months()charクラスを返すのに対し、lubridatemonth()は順序付けられた係数を返すためです。これは便利です。

> #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
于 2012-11-05T20:35:46.070 に答える