web-dev-qa-db-fra.com

Extraction de valeurs uniques du bloc de données à l'aide de R

J'ai un cadre de données avec plusieurs colonnes et je veux pouvoir isoler deux des colonnes et obtenir le nombre total de valeurs uniques ... voici un exemple de ce que je veux dire:

Disons que j'ai un cadre de données df:

df<- data.frame(v1 = c(1, 2, 3, 2, "a"), v2 = c("a", 2 ,"b","b", 4))
df

  v1 v2
1  1  a
2  2  2
3  3  b
4  2  b
5  a  4

Maintenant, ce que je cherche à faire, c'est d'extraire uniquement les valeurs uniques sur les deux colonnes. Donc, si je viens d'utiliser unique () pour chaque colonne, la sortie ressemblerait à ceci:

> unique(df[,1])
[1] 1 2 3 a
> unique(df[,2])
[1] a 2 b 4

Mais ce n'est pas bon car il ne trouve que les valeurs uniques par colonne, alors que j'ai besoin du nombre total de valeurs uniques sur les deux colonnes! Par exemple, "a" est répété dans les deux colonnes, mais je ne veux le compter que une fois. Pour un exemple de sortie de ce dont j'ai besoin; imaginez les colonnes V1 et V2 superposées comme ceci:

  V1_V2
1      1
2      2
3      3
4      2
5      a
6      a
7      2
8      b
9      b
10     4

Les valeurs uniques de V1_V2 seraient:

   V1_V2
1      1
2      2
3      3
5      a
8      b
10     4

Ensuite, je pourrais simplement compter les lignes en utilisant nrow (). Avez-vous une idée de la manière dont je pourrais atteindre cet objectif?

5
Electrino

Ceci est bien adapté à union:

data.frame(V1_V2=union(df$v1, df$v2))

#  V1_V2
#1     1
#2     2
#3     3
#4     a
#5     b
#6     4
8
989

Essaye ça:

unique(c(df[,1], df[,2]))
3
Tim Biegeleisen

Une approche générique: 

uq_elem=c()
for(i in 1:ncol(df))
{
  uq_elem=c(unique(df[,i]), uq_elem)
  uq_elem=unique(uq_elem)
}

Tous les différents éléments seront à: uq_elem

0
pablo_sci

Avec cette approche, vous pouvez obtenir les valeurs uniques, peu importe le nombre de colonnes que vous avez:

df2 <- as.vector(as.matrix(df))
unique(df2)

Et puis, utilisez simplement length.

0