2012-06-22 9 views
9

Nel mio caso ho un vettore numerico (future_prices). Uso un vettore data da un altro vettore (qui: pred_commodity_prices $ futuredays) per creare numeri per i mesi. Dopo di che uso cbind per legare i mesi al vettore numerico. Tuttavia, è successo che il vettore numerico diventa non numerico. Sai come qual è la ragione di questo? Quando uso as.numeric (future_prices) ottengo strani valori. Quale potrebbe essere un'alternativa? GrazieR: il vettore numerico diventa non numerico dopo il cbind delle date

head(future_prices) 
pred_peak_month_3a pred_peak_quarter_3a 
1   68.33907    62.37888 
2   68.08553    62.32658 

is.numeric(future_prices) 
[1] TRUE 
> month = format(as.POSIXlt.date(pred_commodity_prices$futuredays), "%m") 
> future_prices <- cbind (future_prices, month) 
> head(future_prices) 
    pred_peak_month_3a  pred_peak_quarter_3a month 
    1 "68.3390747063745" "62.3788824938719"  "01" 
is.numeric(future_prices) 
[1] FALSE 

risposta

21

Il motivo è che cbind restituisce una matrice e una matrice può contenere solo un tipo di dati. Si potrebbe utilizzare un data.frame invece:

n <- 1:10 
b <- LETTERS[1:10] 
m <- cbind(n,b) 
str(m) 
chr [1:10, 1:2] "1" "2" "3" "4" "5" "6" "7" "8" "9" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:2] "n" "b" 

d <- data.frame(n,b) 
str(d) 
'data.frame': 10 obs. of 2 variables: 
$ n: int 1 2 3 4 5 6 7 8 9 10 
$ b: Factor w/ 10 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 
3

Vedere ?format. I format funzione restituisce:

Uno scopo della struttura analoga a ‘x’ contenente carattere rappresentazioni degli elementi del primo argomento ‘x’ in un formato comune , e nella codifica del locale corrente.

da ?cbind, cbind rendimenti

... una matrice che unisce il ‘...’ argomenti colonna-saggio o riga-saggio. (Eccezione: se non ci sono ingressi o tutti gli ingressi sono 'NULL', il valore è 'NULL'.)

e tutti gli elementi di una matrice deve essere della stessa classe, quindi tutto è costretto a carattere.

+2

So che ti piace la soluzione data.frame, ma se si voleva utilizzare una matrice si potrebbe costringere il vostro 'month' a numerico:' come .numeric (month) 'e tutti i tuoi dati sarebbero numerici. – GSee

-1

F.Y.I.
Quando una colonna è "fattore", semplicemente/direttamente utilizzando as.numeric cambierà il valore in quella colonna. Il modo corretto è:

data.frame[,2] <- as.numeric(as.character(data.frame[,2])) 

trovare maggiori dettagli: Converting values to numeric, stack overflow

+0

Questo è solo per ulteriori informazioni. Johannes ha già risposto bene a questa domanda. –

Problemi correlati