我的数据框如下所示:
eid prod dp
1 1 0 2015-12-28
2 1 1 2016-01-28
3 1 1 2016-02-28
4 2 1 2015-12-28
5 2 1 2016-01-28
6 2 1 2016-02-28
7 3 0 2015-11-28
8 3 1 2015-12-28
9 3 1 2016-01-28
10 3 0 2016-02-28
eid:字母数字id
prod:产品持有某个日期。因此,如果您在上个月的某个日期添加了产品,那么在您选择退出之前,它仍会在本月显示
dp:每个日期一行。
我正在尝试建立一个标志,告诉我这个月是否有一个新的prid添加了一个新的prod。所以我需要在flg列中输出如下:
eid prod dp flg
1 1 0 2015-12-28 0
2 1 1 2016-01-28 1
3 1 1 2016-02-28 0
4 2 1 2015-12-28 0
5 2 1 2016-01-28 0
6 2 1 2016-02-28 0
7 3 0 2015-11-28 0
8 3 1 2015-12-28 1
9 3 1 2016-01-28 0
10 3 0 2016-02-28 -1
假设数据框未按任何特定顺序排序
答案 0 :(得分:0)
在'eid'分组后我们只需要diff
library(data.table)
setDT(df1)[, flg := c(0, diff(prod)), eid]
df1
# eid prod dp flg
# 1: 1 0 2015-12-28 0
# 2: 1 1 2016-01-28 1
# 3: 1 1 2016-02-28 0
# 4: 2 1 2015-12-28 0
# 5: 2 1 2016-01-28 0
# 6: 2 1 2016-02-28 0
# 7: 3 0 2015-11-28 0
# 8: 3 1 2015-12-28 1
# 9: 3 1 2016-01-28 0
#10: 3 0 2016-02-28 -1
或在dplyr
library(dplyr)
df1 %>%
group_by(eid) %>%
mutate(flg = c(0, diff(prod)))
或者用基础R
with(df1, ave(prod, eid, FUN = function(x) c(0, diff(x))))