我有一个数据框,如:
yq store value
2014 Q1 1000 89
如何添加一个额外的列,该列基于第1列中的年季度,该季度的开始日期。因此,在此示例中,我想添加:2014年1月1日。
答案 0 :(得分:2)
例如,您可以使用lubridate
:
library(tidyverse)
df <- tibble(yq = "2014 Q1", store = 1e3, value = 89)
df_new <- df %>%
mutate(start_date = lubridate::yq(yq))
# A tibble: 1 x 4
yq store value start_date
<chr> <dbl> <dbl> <date>
1 2014 Q1 1000 89 2014-01-01
答案 1 :(得分:0)
假设数据与结尾处的注释相同,请首先将yq
转换为yearqtr
对象。这样的对象在内部表示为year + frac,其中Q1,Q2,Q3和Q4的frac = 0、1 / 4、2 / 4和3/4。它们呈现如下所示,并且可以很容易地进行操作,例如yq + 1/4
是下一季度。有关更多信息,请参见?yearqtr
。
鉴于yearqtr
对象,您甚至可能不需要Date
列;但是,如果您这样做,则将其转换为Date
类。默认转换为给出季度的第一天。 (使用frac=1
的{{1}}自变量获取季度末。)
as.Date
给予:
library(zoo)
transform(transform(DF, yq = as.yearqtr(yq)), Date = as.Date(yq))
如果您不需要 yq store value Date
1 2014 Q1 1000 89 2014-01-01
作为yq
对象,则可以将其略微缩短:
yearqtr
可重复显示的输入假定为:
transform(DF, Date = as.Date(as.yearqtr(yq)))