2016-07-19 1 views
0

quelques colonnes d'une trame de données donnée sont des vecteurs de niveau de facteur, prendre un d'entre eux comme par exemple:valeurs ne correspondent pas au niveau de R

[4661] 12.7   13.2   10.1   12.3   
[4665] Not Available 12.7   Not Available Not Available 
[4669] Not Available Not Available Not Available 11.1   
[4673] 9.9   9    Not Available 9.7   
[4677] 8.9   10.1   11.7   13   
[4681] Not Available 11.5   Not Available Not Available 
[4685] 12.3   11.2   Not Available 11.1   
[4689] 10.4   Not Available Not Available Not Available 
[4693] 11.5   Not Available Not Available Not Available 
[4697] Not Available Not Available 12   Not Available 
[4701] Not Available Not Available Not Available Not Available 
[4705] Not Available Not Available 
106 Levels: 10 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 ... Not Available 

Je trouve ennuyeux qu'il ne cesse de dire les 106 niveaux de départ de 10 puis 10,1, mais en fait il y a beaucoup de valeurs en dessous de 10, comme indiqué dans la liste ci-dessus.

Comment résoudre ce problème, et les niveaux correspondent-ils automatiquement à toutes les valeurs? Merci.

+1

Utilisation Fonction 'levels' pour les connaître tous. – user2100721

+0

Il s'agit d'une décision de conception judicieuse - vous ne vous attendriez pas à ce que R imprime tous les niveaux alors qu'il pourrait y en avoir des millions. – thelatemail

+0

@thelatemail mon problème est qu'il (10,10.1,10.2) semble suggérer que le niveau le plus bas est 10, alors qu'il y a évidemment beaucoup de valeurs plus petites que – user6606453

Répondre

1

Vous pouvez modifier l'ordre à l'ordre numérique avec une ré factor -ment

x <- factor(c(10,10.1,10.2,9,8,1,"Not available")) 
levels(x) 
#[1] "1"    "10"   "10.1"   "10.2"   
#[5] "8"    "9"    "Not available" 


factor(x, levels=levels(x)[order(as.numeric(as.character(levels(x))),na.last=TRUE)]) 
#[1] 10   10.1   10.2   9    8    1    Not available 
#Levels: 1 8 9 10 10.1 10.2 Not available 

On peut dire que vous devez simplement utiliser ces données comme numérique en premier lieu, comme:

as.numeric(as.character(x)) 
#[1] 10.0 10.1 10.2 9.0 8.0 1.0 NA