根据其他字段的重复值自增字段

Auto-increment field based on duplicate values of other fields

我有一个这样的数据框:

df <- data.frame(
      COL1 = rep("28", 10),
      COL2 = c(rep("33", 6), rep("45", 4)),
      COL3 = c("10", "10", "10", "10", "23", "23", "22", "22", "22", "29")
    )
> df
#    COL1 COL2 COL3
# 1    28   33   10
# 2    28   33   10
# 3    28   33   10
# 4    28   33   10
# 5    28   33   23
# 6    28   33   23
# 7    28   45   22
# 8    28   45   22
# 9    28   45   22
# 10   28   45   29

现在我想根据 COL1 到 COL3 的重复值自动增量填充 COL4。输出应如下所示:

> df
#    COL1 COL2 COL3 COL4
# 1    28   33   10    1
# 2    28   33   10    2
# 3    28   33   10    3
# 4    28   33   10    4
# 5    28   33   23    1
# 6    28   33   23    2
# 7    28   45   22    1
# 8    28   45   22    2
# 9    28   45   22    3
# 10   28   45   29    1

我该怎么做?任何帮助将不胜感激。

注意:列不一定排序。

基础 R

对于基数 R,使用 ave:

vec <- apply(df, 1, paste, collapse = "")
df$COL4 <- ave(vec, vec, FUN = seq_along)

dplyr

使用 dplyrgroup_by 所有列并使用 row_number。如果它们比 group_by 多列,您可以使用 group_by(across(everything())).

library(dplyr)
df %>% 
  group_by(COL1, COL2, COL3) %>% 
  mutate(COL4 = row_number())

输出

   COL1  COL2  COL3   COL4
   <chr> <chr> <chr> <int>
 1 28    33    10        1
 2 28    33    10        2
 3 28    33    10        3
 4 28    33    10        4
 5 28    33    23        1
 6 28    33    23        2
 7 28    45    22        1
 8 28    45    22        2
 9 28    45    22        3
10 28    45    29        1