Займем полностью от ответа themailmail и преобразуем его в мурлыканье:

ой игрушечный датафрейм.

df <- tibble::tribble(
  ~var1, ~var2, ~var3, ~var4, ~var5, ~var6, ~var7,
    "A",   "C",    1L,    5L,  "AA",  "AB",    1L,
    "A",   "C",    2L,    5L,  "BB",  "AC",    2L,
    "A",   "D",    1L,    7L,  "AA",  "BC",    2L,
    "A",   "D",    2L,    3L,  "BB",  "CC",    1L,
    "B",   "C",    1L,    8L,  "AA",  "AB",    1L,
    "B",   "C",    2L,    6L,  "BB",  "AC",    2L,
    "B",   "D",    1L,    9L,  "AA",  "BC",    2L,
    "B",   "D",    2L,    6L,  "BB",  "CC",    1L)

Как я могу получить комбинацию минимального количества переменных, которые однозначно идентифицируют наблюдения в кадре данных, т.е. какие переменные вместе могут сделатьосновной ключ?

Способ, которым я подошел к этой проблеме, состоит в том, чтобы найти комбинацию переменных, для которых различные значения равны количеству наблюдений фрейма данных. Итак, те переменные комбинации, которые дадут мне 8 наблюдений, в данном случае. Я случайно попробовал это и нашел несколько:

df %>% distinct(var1, var2, var3)

df %>% distinct(var1, var2, var5)

df %>% distinct(var1, var3, var7)

Таким образом, vars123, vars125, vars137 заслуживают первичного ключа здесь. Как я могу найти эти комбинации переменных программно, используя R. Кроме того, больше предпочтения следует уделять символьным, факторным, датным и (возможно) целочисленным переменным, если это возможно, поскольку двойные значения не должны составлять первичный ключ.

Выходными данными могут быть списки или кадры данных, содержащие комбинации «var1, var2, var3», «var1, var2, var5», «var1, var3, var7».

Ответы на вопрос(5)

Ваш ответ на вопрос