【发布时间】:2020-03-18 12:01:50
【问题描述】:
我有一个看起来像这样的数据框
id year
1 2000
2 2000
1 2001
3 2001
4 2002
5 2002
6 2002
5 2003
6 2003
4 2004
5 2004
我想逐步计算我的数据框中连续出现了多少年 ID。换句话说我想得到
id year count
1 2000 1
2 2000 1
1 2001 2
3 2001 1
4 2002 1
5 2002 1
6 2002 1
5 2003 2
6 2003 2
4 2004 1
5 2004 3
你有什么建议吗?非常感谢, 马可
【问题讨论】:
-
试试
with(df, ave(year, id, FUN = seq_along)) -
为什么
4 2004 1是正确的?不应该是4 2004 2? -
这是
rle类型的答案。这可能是所选重复项的重复位 -
@VitaliAvagyan 不,它应该是 1,因为之前的观察不是在前一年(即 2003 年),而是两年前(即 2002 年)。只有当 id 确实出现在随后的两年中时,我才想将 obs 计为连续的。
-
试试
with(DF, ave(year, id, FUN = function(x) {print(diff(x) != 1); ave(x, c(0, cumsum(diff(x)!= 1)), FUN = seq_along)}))
标签: r