2012-02-23 2 views
6

첫 번째 열이 d/m/y 형식의 날짜이고 두 번째 열이 숫자 값 (sales) 인 데이터 프레임이 있습니다.지정된 월 및 연도의 데이터 프레임 서브 세트

일년 중 각 달의 하위 집합 (예 : 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") 

우분투 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 명령과 관련이 있다고 생각합니다. 그러나 이것은 다른 문제입니다. 나는 초기 질문을 ansereed ssatisfactorily로 간주 할 수있다. –

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") 
관련 문제