2015-04-26 18 views
6

Ho quello che spero sia una semplice domanda su as.numeric(). Ho un sacco di dati con numeri scritti come caratteri. Voglio che siano numerici, ma as.numeric() rimuove i punti decimali. Per esempio:as.numeric() rimuove le cifre decimali in R, come cambiare?

y <- as.character("0.912345678") 
as.numeric(y) 
0.9123457 

voi :) Grazie

+7

opzioni (cifre = 9) – Khashaa

+2

Sono sicuro che questo è un duplicato, ma sono troppo pigro per trovare una domanda adatta per collegarlo al momento. – Dason

+0

@Dason possibilmente questo [qui] (http://stackoverflow.com/questions/2287616/controlling-digits-in-r) o [qui] (http://stackoverflow.com/questions/11568385/why-as- numerico-function-in-r-doesnt-lavoro-correttamente)? Non sono sicuro che le risposte siano abbastanza simili e quindi non ho segnalato la domanda. –

risposta

4

R sta fondamentalmente seguendo alcune regole di base impostazioni di figurazione per la stampa del numero di cifre richieste. È possibile modificare questo con l'opzione digits come segue:

> options(digits=9) 
> y <- as.character("0.912345678") 
> as.numeric(y) 
[1] 0.912345678 

Piccolo EDIT per chiarezza: digits corrisponde al numero di cifre da visualizzare in totale, e non solo il numero di cifre dopo la virgola .

Per esempio,

> options(digits=9) 
> y <- as.character("10.123456789") 
> as.numeric(y) 
[1] 10.1234568 

Nel tuo esempio sopra lo zero prima della virgola non viene conteggiato, questo è il motivo per cui 9 cifre è stato sufficiente per visualizzare il numero completo.

4

Cosa sta succedendo in è che la R sta visualizzando solo cifre di un numero fisso.

Questo post R-help spiega cosa sta succedendo. Per citare Peter Dalgaard, "C'è una differenza tra un oggetto e la visualizzazione di un oggetto."

Con il vostro esempio,

y2 = as.numeric(y) 
print(y2) 
# [1] 0.9123457 

ma sottrarre 0,9 per vedere

y2 - 0.9 
# [1] 0.

Aggiornato basato sul commento di @Khashaa Per modificare l'utilizzo del display

options(digits = 9) 
y2 
# [1] 0.912345678 
Problemi correlati