2017-01-23 3 views
0

je l'a suivante:Vous ne trouvez pas l'indice de valeur numérique

> a 
[1] 0.32142857 0.21428571 0.10714286 0.46428571 0.42857143 0.57142857 0.35714286 0.50000000 0.67857143 0.07142857 0.92857143 0.60714286 
[13] 0.17857143 0.25000000 1.00000000 0.71428571 0.64285714 0.78571429 0.57142857 0.28571429 0.57142857 0.39285714 0.96428571 0.85714286 
[25] 0.75000000 0.53571429 0.82142857 0.14285714 0.39285714 0.21428571 0.03571429 0.89285714 
> str (a) 
num [1:32] 0.321 0.214 0.107 0.464 0.429 ... 
> class (a) 
[1] "numeric" 

Je voudrais trouver la valeur d'index pour l'élément spécifique. Quand je l'utilise pour entier cela fonctionne, mais pas pour les autres:

> which (a==1) 
[1] 15 
> which (a==0.10714286) 
integer(0) 
> match (0.10714286,a) 
[1] NA 

Comment puis-je obtenir la valeur d'index 3 pour 0.10714286?

+2

Voir ici: http://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal – nicola

Répondre

3

Vous devez rechercher la valeur la plus proche à la place:

val <- 0.10714286 
idx <- which.min(abs(a - val)) 
+0

Merci, pouvez-vous expliquer ce qu'est a-val? – Avi

+2

a (votre vecteur) moins la valeur que vous voulez rechercher – mpjdem

+0

Typiquement, vous feriez 'which (abs (a - val) Roland

0

utiliser simplement le vecteur pour stocker les données. Veuillez passer le code suivant:

> a=c(0.32142857,0.21428571,0.10714286,0.46428571,0.42857143) 
    > str(a) 
    num [1:5] 0.321 0.214 0.107 0.464 0.429 
    > a[1] 
    [1] 0.3214286 
    > a[2] 
    [1] 0.2142857 
    > a[3] 
    [1] 0.1071429 
    > a[4] 
    [1] 0.4642857 
    > which(a==0.10714286) 
    [1] 3 
    > class(a) 
    [1] "numeric" 
    > match(0.10714286,a) 
    [1] 3 

Espérons que cela fonctionne pour vous.

+0

Espérons que cette solution soit simple et facile à comprendre. –