Valeurs uniques dans chacune des colonnes d'une base de données

je veux obtenir le nombre de valeurs uniques dans chacune des colonnes d'un bloc de données. Disons que j'ai la base de données suivante:

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

alors il devrait retourner qu'il y a 3 valeurs distinctes pour v1, et 2 pour v2.

j'ai essayé unique(DF), mais cela ne fonctionne pas car chaque ligne est différente.

24
demandé sur Uwe 2013-11-04 09:01:47
la source

8 ответов

ou en utilisant unique:

rapply(DF,function(x)length(unique(x)))
v1 v2 
 3  2 
26
répondu agstudy 2013-11-04 11:38:27
la source
sapply(DF, function(x) length(unique(x)))
7
répondu ben_says 2015-01-07 19:07:19
la source

Voici une approche:

> lapply(DF, function(x) length(table(x)))
$v1
[1] 3

$v2
[1] 2

ce tableau présente essentiellement les valeurs uniques par colonne. En utilisant length sur qui vous indique le nombre. Supprimant length vous montrera la table réelle des valeurs uniques.

5
répondu A5C1D2H2I1M1N2O1R2T1 2013-11-04 09:07:35
la source

dplyr:

DF %>% summarise_all(funs(n_distinct(.)))
3
répondu leerssej 2017-03-24 08:48:04
la source

par souci d'exhaustivité: depuis la version 1.9.6 du CRAN du 19 septembre 2015, le data.table le paquet inclut la fonction d'assistance uniqueN() ce qui nous évite d'écrire

function(x) length(unique(x))

lorsque vous appelez l'un des frères et sœurs de apply():

sapply(DF, data.table::uniqueN)
v1 v2 
 3  2

notez que ni le data.table le paquet doit être chargé niDF contraint à la classe data.table afin d'utiliser uniqueN() ici.

0
répondu Uwe 2017-08-04 09:47:02
la source

Cela devrait fonctionner pour obtenir une valeur unique pour chaque variable:

length(unique(datasetname$variablename))
0
répondu Jigar Pabari 2018-03-02 16:11:48
la source

je pense qu'une fonction comme ce serait vous donner ce que vous cherchez. Cela montre également les valeurs uniques, en plus de combien de NA il y a dans les colonnes de chaque dataframe. Il suffit de brancher votre dataframe, et vous êtes prêt à partir.

totaluniquevals <- function(df) {
  x <<- data.frame("Row Name"= numeric(0), "TotalUnique"=numeric(0), "IsNA"=numeric(0))
  result <- sapply(df, function(x) length(unique(x)))
  isnatotals <- sapply(df, function(x) sum(is.na(x)))

  #Now Create the Row names
  for (i in 1:length(colnames(df))) {
    x[i,1] <<- (names(result[i]))
    x[i,2] <<- result[[i]]
    x[i,3] <<- isnatotals[[i]]

  }
  return(x)
}

Test:

DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))
totaluniquevals(DF)
  Row.Name TotalUnique IsNA
1       v1           3    0
2       v2           2    0

vous pouvez alors utiliser unique sur n'importe quelle colonne, pour voir quelles sont les valeurs uniques spécifiques.

unique(DF$v2) [1] a b Niveaux: a b

-1
répondu petergensler 2017-08-04 09:29:46
la source

cela vous donnera des valeurs uniques dans la base de données DF de la colonne 1.

unique(sc_data[,1])
-1
répondu Nirali Khoda 2017-08-04 09:32:03
la source

Autres questions sur