Supposons que j'ai un cadre de données df avec deux colonnes ou plus, existe-t-il un moyen simple d'utiliser unique()
ou une autre fonction R pour créer un sous-ensemble de combinaisons uniques de deux colonnes ou plus?
Je sais que je peux utiliser sqldf()
et écrire une requête "SELECT DISTINCT var1, var2, ... varN"
facile, mais je cherche un moyen de le faire.
Il m’est venu à l’esprit d’essayer ftable de contraindre à un dataframe et d’utiliser les noms de champs, mais j’obtiens également les totalisations croisées de combinaisons qui n’existent pas dans le jeu de données:
uniques <- as.data.frame(ftable(df$var1, df$var2))
unique
fonctionne sur data.frame
donc unique(df[c("var1","var2")])
devrait être ce que vous voulez.
Une autre option est distinct
à partir de dplyr
package :
df %>% distinct(var1, var2) # or distinct(df, var1, var2)
Remarque:
Pour les anciennes versions de dplyr ( <0.5.0, 2016-06-24 ) distinct
étape supplémentaire requise
df %>% select(var1, var2) %>% distinct
(ou façon ancienne distinct(select(df, var1, var2))
).
La réponse de @ Marek est évidemment correcte, mais peut être dépassée. La version actuelle de dplyr (0.7.4) permet un code encore plus simple:
Utilisez simplement:
df %>% distinct(var1, var2)
Si vous voulez conserver toutes les colonnes, ajoutez
df %>% distinct(var1, var2, .keep_all = TRUE)
Pour GARDER toutes les autres variables de df, utilisez ceci:
unique_rows <- !duplicated(df[c("var1","var2")])
unique.df <- df[unique_rows,]
Une autre méthode moins recommandée utilise row.names () # (voir le commentaire de David ci-dessous):
unique_rows <- row.names(unique(df[c("var1","var2")]))
unique.df <- df[unique_rows,]