【问题标题】:subset data by year given dd/mm/yyyy给定 dd/mm/yyyy 年份的子集数据
【发布时间】:2016-05-12 16:29:40
【问题描述】:

我正在尝试按年对我的数据进行子集化,但我每天都会获得积分,就像我在下面给出的那样。

sell  Buy Country Date
0.00  25.00 AA 17/03/2005
9.09  45.45 AA 16/12/2004
9.09  45.45 AA 16/04/2009
18.18 27.27 AA 18/11/2004

我想要 2004 年的子集,应该得到 ​​p>

sell  Buy Country Date
18.18 27.27 AA 18/11/2004
9.09  45.45 AA 16/12/2004

是否有代码或函数可以做到这一点?

干杯

【问题讨论】:

  • 如果你的日期被格式化为日期,一个普通的子集使用lubridate::yeardf[year(df$Date) == 2004,]
  • @GauravTaneja as.Date 来自基础 R,而不是 lubridate
  • 感谢@Procrastinatus Maximus ,我认为 alistaire 的评论涵盖了它,所以删除了我的。

标签: r date subset


【解决方案1】:

我会始终确保日期字段采用日期格式。 然后你可以使用 Base R 子集来过滤行

假设 df 是你的 data.frame

基础 R:

df$Date <- as.Date(df$Date, '%d/%m/%Y')
df[format(df$Date, '%Y') == "2005", ]

Dplyr:

library(dplyr)
filter(df, format(df$Date, '%Y') == "2005")

【讨论】:

    【解决方案2】:

    这是substrsubset 的一个选项

    subset(df1, substr(Date, nchar(Date)-3, nchar(Date)) == 2004)
    #   sell   Buy Country       Date
    #2  9.09 45.45      AA 16/12/2004
    #4 18.18 27.27      AA 18/11/2004
    

    data.tablelubridate 的另一种方法

    library(lubridate)
    library(data.table)
    setDT(df1)[year(dmy(Date))==2004]
    #    sell   Buy Country       Date
    #1:  9.09 45.45      AA 16/12/2004
    #2: 18.18 27.27      AA 18/11/2004
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 2020-02-24
      • 2015-02-11
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多