【问题标题】:Select subset by date in R在R中按日期选择子集
【发布时间】:2013-06-21 20:48:12
【问题描述】:

我有一个文件,我只需要选择 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, ]

【问题讨论】:

  • 怎么没用?当您的两个示例都有一个名为 date_born 的日期列时,为什么要使用 df$nasc
  • 另外,year 作为POSIXlt 中的一个字段是从 1900 偏移的,即当前年份是 113。
  • Dirk 说了什么,你需要告诉as.POSIXlt format = "%d/%m/%Y"...

标签: r date


【解决方案1】:

如果您愿意使用其他软件包(lubridate),这应该可以。除其他外,Lubridate 解析日期。只需将 use 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

【讨论】:

    【解决方案2】:

    或者:

    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
    

    【讨论】:

      猜你喜欢
      • 2022-06-24
      • 1970-01-01
      • 2021-09-19
      • 2018-12-29
      • 2020-08-24
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多