r - 如何格式化R中的季度日期?
问题描述
我有一个 df 如下:
df
ID Date
1 2000/01/12
2 2015/06/11
3 2013/09/10
4 2002/01/07
5 2006/04/05
我想用代码添加代表季度的第三列:
df$quarter <- paste(format(df$Date, "%y"),
sprintf("%02i", (as.POSIXlt(df$Date)$mon) %/% 3L + 1L), sep="/")
并收到以下输出:
ID Date quarter
1 2000/01/12 00/04
2 2015/06/11 15/04
3 2013/09/10 13/04
4 2002/01/07 02/03
5 2006/04/05 06/02
我的问题是如何更改季度列的格式以获得以下输出:
ID Date quarter
1 2000/01/12 2000q4
2 2015/06/11 2015q4
3 2013/09/10 2013q4
4 2002/01/07 2002q3
5 2006/04/05 2006q2
我不知道如何正确修改我的代码!谢谢!
解决方案
我们可以使用as.yearqtr
fromzoo
然后Q
用q
using替换后面的空格sub
library(zoo)
df$quarter <- sub("\\s+Q", "q", as.yearqtr(df$Date, '%Y/%d/%m'))
df$quarter
#[1] "2000q4" "2015q4" "2013q4" "2002q3" "2006q2"
或者正如@G.Grothendieck 在评论中建议的那样
df <- transform(df, Date = format(as.yearqtr(Date, '%Y/%d/%m'), "%Yq%q"))
数据
df <- structure(list(ID = 1:5, Date = c("2000/01/12", "2015/06/11",
"2013/09/10", "2002/01/07", "2006/04/05")),
class = "data.frame", row.names = c(NA,
-5L))
推荐阅读
- string - 不显示搜索字符串的下一个匹配项
- android - Android Studio 3.3.1 内存不足:Java 堆空间问题
- css - 单击表单时保持表单选择下拉的背景颜色
- apache-kafka - 是否为 kafka 高级消费者保证数据局部性
- javascript - 按与第二个数组中的字符串相同的对象属性值对数组进行排序
- java - 使特殊字符留在索引java中
- c# - 自动化测试从设置中列出的代码中抛出错误,尽管它已经在其他测试中正确执行
- arrays - Swift Array of Ints - 查找与前一个元素的差异大于 10 的索引
- soap - 如何在不发送任何 SOAP 标头的情况下将消息发送到基于 SOAP 的 Web 服务
- c++ - Windows XP 上的 WinHttpSendRequest 和 HTTPS