有一个巨大的数据框,一列满了日期 . 像这样:
Date
2014-01-02
2014-01-02
2014-01-02
2014-01-03
2014-01-03
2014-02-01
2014-02-01
2014-02-02
2014-02-02
我想构建一个额外的列,其中包含当月出现的天数(!数据包含多年数据,因此有超过1个Januaries,Februaries等) . 像这样:
Date Count
2014-01-02 5
2014-01-02 5
2014-01-02 5
2014-01-03 5
2014-01-03 5
2014-02-01 4
2014-02-01 4
2014-02-02 4
2014-02-02 4
我的解决方案很差 . 我使用过滤器选项(来自dplyr)来过滤特定月份,然后计算它们 . 但是因为它耗费了大量时间,而且因为我想自动执行此操作,所以我正在寻找更可持续的解决方案 .
4 回答
您可以使用base
R
:substr(d$Date, 1,7)
从d$Date
中的字符串中提取前七个字符(即包含年份和月份的部分,例如2014-01
) . 结果用于ave()
中的分组这是
data.table
的解决方案:如果您的日期为POSIXlt格式,则内置月份,您可以创建一个表格来引用 .
0/1行只是列名 . 在POSIX 1月是0月,2月是1月等 .
既然你已经在使用
dplyr
......我已经更改了您发布的示例,以便考虑每月的年份,因为您需要单独计算它们(在您的评论中指定):