2013-06-21 110 views
2

選擇集我有一個文件,我需要選擇只是被前一年出生的孩子2004年按日期R中

n_child  sex date_born 
    1  M 20/03/2002 
    2  M 09/08/2001 
    3  F 01/09/2003 
    4  M 07/05/2003 
    5  M 12/09/2004 
    6  F 19/08/2004 

我想

n_child  sex date_born 
    1  M 20/03/2002 
    2  M 09/08/2001 
    3  F 01/09/2003 
    4  M 07/05/2003 

我嘗試以下,但它沒有工作:

datesub <- (as.POSIXlt(df$date_born)$year)<2004 
dat  <- df[datesub, ] 
+1

怎麼沒工作?當你的兩個例子有一個名爲'date_born'的日期列時,爲什麼你使用'df $ nasc'? – Justin

+1

此外,'POSIXlt'中的'year'作爲字段從1900年開始偏移,即當前年份爲113. –

+0

Dirk說了什麼,以及您需要告訴as.POSIXlt這個事實:format =「%d /%M /%Y「'... – flodel

回答

3

如果你願意使用另一個軟件包(lubridate),這應該起作用。除此之外,Lubridate分析日期。只需使用ymd('datestring')其中y是年份,m是月份,d是它們在您嘗試解析的字符串中出現的順序中的天數。

> df 
    n_child sex date_born 
1  1 M 20/03/2002 
2  2 M 09/03/2001 
3  3 F 01/09/2003 
4  4 M 07/05/2003 
5  5 M 12/09/2004 
6  6 F 19/08/2004 

> require(lubridate) 
> df$dateborn <- dmy(df$date_born) 
6 parsed with %d/%m/%Y 
> datesub <- df[df$date_born < ymd(20040101),] 
1 parsed with %Y%m%d 

> datesub 
    n_child sex date_born 
1  1 M 2002-03-20 
2  2 M 2001-03-09 
3  3 F 2003-09-01 
4  4 M 2003-05-07 
1

或者:

n.child<-as.numeric(c(1,2,3,4,5,6)) 
sex<-as.factor(c("f","f","f","m","m","f")) 
date_born<-as.Date(c("2002-01-01", "2002-12-01", "2003-05-13", "2003-06-17", "2004-01-03", "2004-09-09")) 
DF<-data.frame(n.child, sex,date_born) 


DF1<-DF[DF$date_born<"2004-01-01",] 


> DF1 
    n.child sex date_born 
1  1 f 2002-01-01 
2  2 f 2002-12-01 
3  3 f 2003-05-13 
4  4 m 2003-06-17