根据条件在组中找到最后一行

时间:2016-12-29 21:23:01

标签: r dataframe dplyr

我有一个非常大的数据框(约4.4万条记录),记录对调查的回复。数据按id变量分组,所需的输出为 像这样:

read.table(header = TRUE, text = "month id  request response    dlq
201101  A01 Y   1   0
201102  A01 N   0   0
201103  A01 N   0   0
201104  A01 N   0   0
201105  A01 N   0   0
201106  A01 N   0   0
201107  A01 N   0   0
201108  A01 Y   0   1
201109  A01 N   0   1
201110  A01 N   0   1
201111  A01 N   0   1
201112  A01 N   0   1
201201  A01 Y   1   0
201202  A01 N   0   0
201203  A01 N   0   0
201204  A01 Y   0   1"

我想创建一个变量dlq,它是二进制的,取决于请求和响应变量的值。我希望dlq列符合以下条件

  1. 如果request =“Y”且response =“1”,则dlq = 0.
  2. 如果request =“Y”且响应= 0,则dlq = 1。
  3. 如果request =“N”且response = 0,则查找最近一个月(月份的最大值,此处为整数),其中request =“Y”。如果本月响应= 0,则dlq = 1。
  4. 第一个很简单,有一个ifelse语句 问题出在第三个条件。

    在上面的示例中,对于201109月,dlq = 1,因为request =“N”且响应= 0,最近一个月,其中request =“Y”,201108,response = 0.类似于201110 - 201112个月。

    基于此(Find the last row in a data frame that meets certain criteria)我尝试了以下无效:

    df %>%
     group_by(id) %>%
     mutate(dlq = ifelse(lag(request) == "Y" & response = 0, 1, 0))
    

    我知道只使用ifelse语句才能做到这一点。我知道使用来自dplyr的group_by来对数据进行分组,但我不知道如何通过dplyr或其他方式干净地执行上述条件。我需要为此成功完成数以万计的ID。我认为max(irm)[condition]命令可能有效,但我不知道如何。

0 个答案:

没有答案