在R中生成组内序列

5

我希望获得一个类别内的序列。

我的数据如下:

A B 
1 1 
1 2
1 2
1 3
1 3
1 3
1 4
1 4

我希望能够获取变量"c",使我的数据看起来像这样:

A B C
1 1 1
1 2 1
1 2 2
1 3 1
1 3 2
1 3 3
1 4 1
1 4 2
1个回答

14

使用seq_alongave

> mydf$C <- with(mydf, ave(A, A, B, FUN = seq_along))
> mydf
  A B C
1 1 1 1
2 1 2 1
3 1 2 2
4 1 3 1
5 1 3 2
6 1 3 3
7 1 4 1
8 1 4 2
如果你的数据已经按顺序排列(在这种情况下是这样的),你也可以使用 rlesequence (mydf$C <- sequence(rle(do.call(paste, mydf))$lengths)),但是用 ave 没有这个限制。

如果你喜欢使用 data.table ,你可以按如下方式利用 .N

library(data.table)
DT <- data.table(mydf)
DT[, C := sequence(.N), by = c("A", "B")]
DT
#    A B C
# 1: 1 1 1
# 2: 1 2 1
# 3: 1 2 2
# 4: 1 3 1
# 5: 1 3 2
# 6: 1 3 3
# 7: 1 4 1
# 8: 1 4 2

我在我的代码中遇到了类似的问题,我使用data.table解决了这个问题。我在stackoverflow上看到很多其他答案推荐使用ave(),但我不太确定ave应该如何工作。这是r文档的链接。 ave让我想起了lapply和其他函数。你能详细介绍一下第一种方法吗?https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/ave - Eric Boorman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接