2017-01-23 4 views
0

Ich habe folgendes a finden:Kann nicht numerischen Wert Index

> 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" 

Ich möchte den Indexwert für bestimmtes Element finden. Wenn ich es für Integer verwende es funktioniert, aber nicht für die andere:

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

Wie kann ich den Indexwert 3 für 0.10714286 bekommen?

+2

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

Antwort

3

Sie werden für den nächsten Wert suchen haben statt:

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

Danke, können Sie erklären, was ist A-Val? – Avi

+2

a (Ihr Vektor) minus der Wert, nach dem Sie suchen möchten – mpjdem

+0

Normalerweise würden Sie 'which (abs (a - val) Roland

0

einfach den Vektor verwenden, um die Daten zu speichern. Bitte gehen Sie durch den folgenden Code:

> 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 

Ich hoffe, es funktioniert für Sie.

+0

Hoffe, diese Lösung sieht einfach und leicht zu verstehen. –

Verwandte Themen