Вот мой игрушечный фрейм данных.
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".