2012-02-23 10 views
6

私は、最初の列がd/m/y形式の日付で、2番目が数値(売上)であるデータフレームを持っています。指定された月と年のデータフレームのサブセットの設定

1年ごとのサブセット(11/11、12/11など)を作成したいとします。私はこの答えで提案コードを試みた:subset a data.frame with multiple conditions

をし、それが月の上の条件が課されたときに動作します

subset(sales, format.Date(date, "%m")=="11") 

が、私は年の条件を追加するとき、それはエラーメッセージinvalid 'x' argumentと空のサブセットを返します。

subset(sales, format.Date(date, "%m")=="11" & format.Date(date, "%y")=="11") 

私はUbuntu 10.04でR 2.10.1-2を使用しています。お手伝いいただきありがとうございます。

答えて

4

データセットを提供していないので、私は自分が提供したリンクから自分自身を作成し​​ました。あなたの方法は私のために働き、私が条件の両方(月と年)を満たしていない場合にのみ空のデータセットを取得するので、日付シリーズ(月と年)をサブセット化しようとしていると思います)は存在しません(しかし、あなたが使用しているコードなしでは確実に伝えることはできません)。ここで私が使用したコードだ:

sales <- read.table(text="2372 Kansas KS2000111 HUMBOLDT, CITY OF ATRAZINE 1.3 05/07/2006 
9104 Kansas KS2000111 HUMBOLDT, CITY OF ATRAZINE 0.34 07/23/2006 
9212 Kansas KS2000111 HUMBOLDT, CITY OF ATRAZINE 0.33 02/11/2007 
2094 Kansas KS2000111 HUMBOLDT, CITY OF ATRAZINE 1.4 05/06/2007 
16763 Kansas KS2000111 HUMBOLDT, CITY OF ATRAZINE 0.61 05/11/2009 
1076 Kansas KS2000111 HUMBOLDT, CITY OF METOLACHLOR 0.48 05/12/2002 
1077 Kansas KS2000111 HUMBOLDT, CITY OF METOLACHLOR 0.3 05/07/2006") 

sales$V9 <- as.Date(sales$V9, "%m/%d/%Y") 
names(sales)[9] <- 'date' 
subset(sales, format.Date(date, "%m")=="05" & format.Date(date, "%y")=="07") 
# V1  V2  V3  V4 V5 V6  V7 V8  date 
#4 2094 Kansas KS2000111 HUMBOLDT, CITY OF ATRAZINE 1.4 2007-05-06 

subset(sales, format.Date(date, "%m")=="05" & format.Date(date, "%y")=="10") 
#[1] V1 V2 V3 V4 V5 V6 V7 V8 date 
#<0 rows> (or 0-length row.names) 
+0

いくつかの試みを行った後、私のコードは2011年11月に使用しました:サブセット(sales、format.Date(date、 "%m")== "11"&format.Date日付、 "%d")== "11")。私は問題はデータフレームの作成に使用されたread.csvコマンドにあると思いますが、これは別の問題です。私は、私の最初の質問は、あまりにも不安定であると考えることができます。 –

2

この答えはsubsetを回避し、不足している所見を処理し、as.POSIXct日付/時刻の形式を使用しています。しかし、残りのコードはTyler Rinkerの答えと事実上同じです。なお、フォーマットされていない変数Date_Timeの名前を使用するのではなく、as.POSIXctの中に日付/時刻変数の名前を指定する必要があります。

my.data <- read.csv(text = ' 
      Date_Time,  state, city 
    10/05/2011 07:32:40, AK,  aa 
    15/06/2011 13:26:02, AK,  bb 
    19/07/2011 13:26:02, OH,  cc 
        NA, OH,  dd 
    20/05/2012 14:57:27, PA,  ee 
    22/07/2012 14:57:27, AL,  ff 
    20/03/2013 15:03:18, NY,  gg 
', header=TRUE, stringsAsFactors = FALSE, na.strings = 'NA', strip.white = TRUE) 

my.data$my_Date_Time <- as.POSIXct(my.data$Date_Time, format = "%d/%m/%Y %H:%M:%S") 

# Select May 
my.data[format.Date(my.data$my_Date_Time, "%m")=="05" & 
     !is.na(my.data$my_Date_Time),] 

#    Date_Time state city  my_Date_Time 
# 1 10/05/2011 07:32:40 AK aa 2011-05-10 07:32:40 
# 5 20/05/2012 14:57:27 PA ee 2012-05-20 14:57:27 


# Select 2012 
my.data[format.Date(my.data$my_Date_Time, "%Y")=="2012" & 
     !is.na(my.data$my_Date_Time),] 

#    Date_Time state city  my_Date_Time 
# 5 20/05/2012 14:57:27 PA ee 2012-05-20 14:57:27 
# 6 22/07/2012 14:57:27 AL ff 2012-07-22 14:57:27 

# Select May 2012 
my.data[format.Date(my.data$my_Date_Time, "%m")=="05" & 
     format.Date(my.data$my_Date_Time, "%Y")=="2012" & 
     !is.na(my.data$my_Date_Time),] 

#    Date_Time state city  my_Date_Time 
# 5 20/05/2012 14:57:27 PA ee 2012-05-20 14:57:27 
0

"Y"は大文字と小文字を区別します。私は理由を知らないが、月の "m"と日の "d"は小文字ですが、 "Y"は大文字でなければなりません。

subset(sales, format.Date(date, "%m")=="11" & format.Date(date, "%Y")=="11")