我有一个非常大的数据框(约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列符合以下条件
第一个很简单,有一个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]
命令可能有效,但我不知道如何。