首页 > 解决方案 > R data.table 按条件分组的最后一行的二进制值

问题描述

我有这样的数据:

library(data.table)
id <- c("1232","1232","1232","4211","4211","4211")
conversion <- c(0,0,0,1,1,1)
DT <- data.table(id, conversion)

id   date         conversion
1232 2018-01-01   0
1232 2018-01-03   0
1232 2018-01-04   0
4211 2018-04-01   1
4211 2018-04-04   1
4211 2018-04-06   1

我想根据 id 行仅为每个组的最后一行创建一个二进制值。仅当组的转换为 1 时,二进制才会为 1。

id   date         conversion  lastconv
1232 2018-01-01   0           0
1232 2018-01-03   0           0 
1232 2018-01-04   0           0
4211 2018-04-01   1           0
4211 2018-04-04   1           0
4211 2018-04-06   1           1

我尝试在 data.table 中使用一些带有“mult”参数的示例,但只返回了错误。

DT[unique(id), lastconv := 1, mult = "last"]

标签: rdata.table

解决方案


对于每个 id,检查行号是否是组中的最后一个行号,以及 'conversion' 是否为 1。将逻辑结果转换为整数。

DT[ , lastconv := as.integer(.I == .I[.N] & conversion == 1), by = id]

推荐阅读