根据其他两列的值查看观察结果

时间:2019-12-02 20:18:08

标签: r dplyr

我正在为工作培训计划程序管理数据集。而且我正在尝试根据 开始日期的值,每年可视化/检查唯一观察值(即 受益人名称 变量)的数量 列,表示该计划的五年期限。

具体来说,第一年开始于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)仅适用于原子类型和列表类型”

1 个答案:

答案 0 :(得分:1)

一些需要更改的地方,它们将充分利用lubridate软件包。

首先要注意的几点:

  • 错误消息是因为您输入了一个字符变量作为日期,但它不知道它是一个日期。使用lubridate的{​​{1}}函数,它将检测字符的 d ay, m y 字符串并将其转换为日期对象,可与<和>
  • 进行比较
  • 当使用多个dmy()语句时,我认为很难在单个ifelse调用中依次执行这些语句。一种解决方案是嵌套它们,以便在第一个mutate内调用第二个而不是ifelse,在第二个调用内第三个,等等。但是有一种更整齐的方法它与year中的case_when

在这里的示例中,我创建了一些随机采样日期,这些日期已经采用日期格式。在您的数据框中,它们可能将是字符串,因此,多余的行将帮助您将其转换为日期:

dplyr
相关问题