在 R [duplicate] 中生成组内的序列

generate sequence within group in R [duplicate]

提问人:ShrestR 提问时间:9/16/2013 最后编辑:sgibbShrestR 更新时间:9/16/2013 访问量:17430

问:

我正在尝试获取类别中的序列。

我的数据是:

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
R 序列

评论


答:

14赞 A5C1D2H2I1M1N2O1R2T1 9/16/2013 #1

与以下设备一起使用 :aveseq_along

> 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

如果您的数据已经排序(在本例中是这样),则还可以与 () 一起使用,但您没有 .sequencerlemydf$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

评论

0赞 Eric Boorman 3/30/2022
我的代码中也有类似的问题,我能够使用 data.table 解决这个问题。我在 stackoverflow 上看到很多其他答案建议使用 ave(),但我并不完全确定 ave 应该如何工作。这里是 r 文档的链接。AVE让我想起了很多lapply和其他功能。您能详细介绍一下第一种方法吗?rdocumentation.org/packages/stats/versions/3.6.2/topics/ave