我有一个档案,我需要选择在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
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, ]
答案 0 :(得分: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 :(得分: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