为 R 中的列的唯一组合创建索引

Bry*_*uza 2 r dataframe

我得到了一组这样的数据:

df = data.frame(A = c(0.1, 0.3, 0.7, 0.9, 0.5, 0.4, 0.3, 0.3, 0.9, 0.9),
                B = c(0.5, 0.4, 0.8, 0.6, 0.8, 0.5, 0.4, 0.5, 0.6, 0.5),
                D = c(0.2, 0.1, 0.5, 0.8, 0.6, 0.7, 0.1, 0.3, 0.8, 0.3))
Run Code Online (Sandbox Code Playgroud)

但我需要为 A、B 和 D 的所有唯一组合创建一个索引。就像这样:

   index   A   B   D
1      1 0.1 0.5 0.2
2      2 0.3 0.4 0.1
3      3 0.7 0.8 0.5
4      4 0.9 0.6 0.8
5      5 0.5 0.8 0.6
6      6 0.4 0.5 0.7
7      2 0.3 0.4 0.1
8      7 0.3 0.5 0.3
9      4 0.9 0.6 0.8
10     8 0.9 0.5 0.3
Run Code Online (Sandbox Code Playgroud)

请注意,第 4 行和第 9 行以及第 2 行和第 7 行的 A、B 和 D 之间的组合相同。因此,它们接收相同的索引值

Ano*_*n R 5

您可以使用以下代码。也许索引的命名与您的输出略有不同,但逻辑是相同的:

library(dplyr)

df %>%
  group_by(A, B, D) %>%
  mutate(index = cur_group_id()) %>%
  ungroup() %>%
  arrange(index)

# A tibble: 10 x 4
       A     B     D index
   <dbl> <dbl> <dbl> <int>
 1   0.1   0.5   0.2     1
 2   0.3   0.4   0.1     2
 3   0.3   0.4   0.1     2
 4   0.3   0.5   0.3     3
 5   0.4   0.5   0.7     4
 6   0.5   0.8   0.6     5
 7   0.7   0.8   0.5     6
 8   0.9   0.5   0.3     7
 9   0.9   0.6   0.8     8
10   0.9   0.6   0.8     8
Run Code Online (Sandbox Code Playgroud)