dplyr:在group_by中生成行号/行位置

ibo*_*oru 15 r dplyr data.table

我有一个数据集,我想按组生成行位置.例如

library(data.table)

data<-data.table(Position=c(1,2,3,4,5,6,7,8,9,10),
Category=c("M","M","M","M","F","F","F","M","M","F"))
Run Code Online (Sandbox Code Playgroud)

我按类别分组,并希望按组创建作为行位置的列.像下面或data.table一样的东西

dataByGroup %>% group_by(Category) %>% mutate(positionInCategory = 1:nrow(Category))
Run Code Online (Sandbox Code Playgroud)

无法弄清楚如何实现这一目标?

期望的输出:

| Position|Category | positionInCategory|
|--------:|:--------|------------------:|
|        1|M        |                  1|
|        2|M        |                  2|
|        3|M        |                  3|
|        4|M        |                  4|
|        5|F        |                  1|
|        6|F        |                  2|
|        7|F        |                  3|
|        8|M        |                  5|
|        9|M        |                  6|
|       10|F        |                  4|
Run Code Online (Sandbox Code Playgroud)

use*_*015 23

请尝试以下方法:

library(data.table)
library(dplyr)

data<-data.table(Position=c(1,2,3,4,5,6,7,8,9,10),
                 Category=c("M","M","M","M","F","F","F","M","M","F"))

cleanData <- data %>%
  group_by(Category) %>%
  mutate(positionInCategory = 1:n())
Run Code Online (Sandbox Code Playgroud)


Fra*_*ank 6

尝试

data[, new := rowid(Category)]
# or, if you're using 1.9.6 or older
data[, new := 1:.N, by=Category]

    Position Category new
 1:        1        M   1
 2:        2        M   2
 3:        3        M   3
 4:        4        M   4
 5:        5        F   1
 6:        6        F   2
 7:        7        F   3
 8:        8        M   5
 9:        9        M   6
10:       10        F   4
Run Code Online (Sandbox Code Playgroud)

要使用rowid,您目前需要包的unstable/devel版本.

  • 不,没关系,只需确保包含安装说明的警告和参考. (2认同)