我正在为工作培训计划程序管理数据集。而且我正在尝试根据 开始日期的值,每年可视化/检查唯一观察值(即 受益人名称 变量)的数量 列,表示该计划的五年期限。
具体来说,第一年开始于2012-09-01,结束于2013-08-31,第二年开始于2013-09-01,结束于2014-08-31,依此类推。< / p>
最终,我想看看这些年来我的93,500个观测值是如何分布的。例如,我可能会发现的一个见解是,年龄在30岁以下的观察者中有90%在第一年加入了该计划,大概是因为他们与劳动力之间的联系更加紧密,并且更加了解政府的协助程序。
到目前为止,这是我尝试过的代码:
teachers_subsidy5 %>%
mutate(year = NA,
year = ifelse(date < "1/9/2012", 1, year),
year = ifelse(date > "1/9/2013" & date < "31/8/2014", 2, year),
year = ifelse(date > "1/9/2014" & date < "31/8/2015", 3, year),
year = ifelse(date > "1/9/2015" & date < "31/8/2016", 4, year),
year = ifelse(date > "1/9/2016" & date < "31/8/2017", 5, year))
但是,我不断收到以下错误消息: “日期错误<“ 1/9/2012”:比较(3)仅适用于原子类型和列表类型”
答案 0 :(得分:1)
一些需要更改的地方,它们将充分利用lubridate
软件包。
首先要注意的几点:
lubridate
的{{1}}函数,它将检测字符的 d ay, m 和 y 字符串并将其转换为日期对象,可与<和> dmy()
语句时,我认为很难在单个ifelse
调用中依次执行这些语句。一种解决方案是嵌套它们,以便在第一个mutate
内调用第二个而不是ifelse
,在第二个调用内第三个,等等。但是有一种更整齐的方法它与year
中的case_when
。在这里的示例中,我创建了一些随机采样日期,这些日期已经采用日期格式。在您的数据框中,它们可能将是字符串,因此,多余的行将帮助您将其转换为日期:
dplyr