将变量的唯一组合作为向量存储在 R 中的数据框中

Store unique combinations of variables as a vector in a data frame in R

我有以下问题。

我有一个大data.frame。在这个 data.frame 中,有 7 个变量的 648 种不同组合。 data.frame 是该长度的 4 倍,共 2592 行。我想要做的是在 data.frame 中创建一个向量,它指示该行中的哪些组合。所以最后应该有一个向量,其中包含数字1-648,每四次。

最后应该是这样的,这里是两个变量和 3 种不同组合的示例。

      a b     distinct_combinations
  <dbl> <chr>                 <dbl>
1     1 a                         1
2     2 b                         2
3     3 c                         3
4     1 a                         1
5     2 b                         2
6     3 c                         3

谢谢!

v1 = rep(seq(1:3),2)
v2 = rep(c("a","b","c"),2)
df = data.frame(v1,v2)
df$id = as.factor(paste(v1,v2,sep = ""))
levels(df$id) = seq(1:length(unique(df$id)))

您可以创建一个列并将其级别更改为数字

您可以 group_by 您想要的列并使用 group_indices:

library(tidyverse)
data %>% 
  group_by(across(a:b)) %>% 
  mutate(distinct_combinations = group_indices())

# A tibble: 6 x 3
# Groups:   a, b [3]
      a b     distinct_combinations
  <int> <chr>                 <int>
1     1 a                         1
2     2 b                         2
3     3 c                         3
4     1 a                         1
5     2 b                         2
6     3 c                         3

您还可以排列您的列并使用 data.table::rleidv:

data %>% 
  arrange(across(a:b)) %>% 
  mutate(distinct_combinations = data.table::rleidv(.))

数据

structure(list(a = c(1L, 2L, 3L, 1L, 2L, 3L), b = c("a", "b", 
"c", "a", "b", "c")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

包 data.table 中的特殊符号 .GRP 本质上就是您要的:

.GRP is an integer, length 1, containing a simple group counter. 1 for the 1st group, 2 for the 2nd, etc. data.table documentation

library(data.table)
setDT(data)  # change data to a data.table
data[, distinct_combinations := .GRP, by = .(a, b)]