【问题标题】:generate sequence within group in R [duplicate]在 R 中的组内生成序列 [重复]
【发布时间】:2013-09-16 01:15:06
【问题描述】:

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

我的数据是:

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 sequence


    【解决方案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
    

    如果您的数据已经订购(在这种情况下),您还可以使用 sequencerle (mydf$C &lt;- 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等函数。你能扩展第一种方法吗? rdocumentation.org/packages/stats/versions/3.6.2/topics/ave
    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多