在组中创建行标识符

Creating row identifier within a group

提问人:Aman 提问时间:6/23/2023 更新时间:6/23/2023 访问量:55

问:

我有以下形式的数据。有超过一百万行。我只想创建另一列来帮助我识别分组的 Item3 的行。前两列无关紧要。刚刚添加,让我知道我在数据集中还有其他列。我使用了 cumsum 和 group_indices但没有用。

项目1 项目2 项目3
一个
一个
一个
B
B
C
项目1 项目2 项目3 标识符
一个 1
一个 2
一个 3
B 1
B 2
C 1
R Group-BY 标识符 突变

评论

0赞 akrun 6/23/2023
library(data.table); dt$Identifier <- rowid(dt$Item3)
0赞 C. Murtaugh 6/23/2023
使用软件包:dplyrgroup_by(df, Item1, Item2, Item3) %>% mutate(Identifier=1:n())

答:

1赞 Mark 6/23/2023 #1
library(tidyverse)

data <- tibble(
  Item1 = c("One", "One", "One", "One", "One", "One"),
  Item2 = c("Two", "Two", "Two", "Two", "Two", "Two"),
  Item3 = c("A", "A", "A", "B", "B", "C")
)

data %>% 
  mutate(ID = row_number(), .by = Item3))

  Item1 Item2 Item3     ID
  <chr> <chr> <chr> <int>
1 One   Two   A         1
2 One   Two   A         2
3 One   Two   A         3
4 One   Two   B         1
5 One   Two   B         2
6 One   Two   C         1

感谢 Chamkrai 的想法 😃.by = Item3

评论

0赞 Chamkrai 6/23/2023
请添加到您所需的库中。dplyr
0赞 Mark 6/23/2023
..............做!
1赞 Chamkrai 6/23/2023
好!顺便说一句 - 您可以在新更新后立即跳过group_by()data %>% mutate(ID = row_number(), .by = Item3)
0赞 Mark 6/23/2023
好!我不知道🤓你每天都能学到新东西
0赞 NicChr 6/23/2023 #2

基本解决方案

ave(integer(nrow(data)), data$Item3, FUN = seq_along)

data.table 解决方案

library(data.table)
setDT(data)[, ID := rowidv(Item3)]

数据

structure(list(Item1 = c("One", "One", "One", "One", "One", "One"
), Item2 = c("Two", "Two", "Two", "Two", "Two", "Two"), Item3 = c("A", 
"A", "A", "B", "B", "C")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L))