2012-06-22 10 views
9

Tengo un vector numérico (future_prices) en mi caso. Utilizo un vector de fecha de otro vector (aquí: pred_commodity_prices $ futuredays) para crear números para los meses. Después de eso uso cbind para vincular los meses al vector numérico. Sin embargo, sucedió que el vector numérico se volvió no numérico. ¿Sabes cuál es el motivo de esto? Cuando uso as.numeric (future_prices) obtengo valores extraños. ¿Qué podría ser una alternativa? GraciasR: vector numérico que se vuelve no numérico después de cbind of dates

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 

Respuesta

21

La razón es que cbind devuelve una matriz y una matriz solo puede contener un tipo de datos. Se puede usar un data.frame lugar:

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

Ver ?format. Los format función devuelve:

Un objeto de estructura similar a ‘x’ de caracteres que contiene representaciones de los elementos de la primera argumento ‘x’ en un formato común , y en la codificación de la localización actual.

de ?cbind, cbind rendimientos

... una matriz de la combinación de la ‘...’ argumentos por columnas o por filas. (Excepción: si no hay entradas o todas las entradas se 'NULL', el valor es 'NULL'.)

y todos los elementos de una matriz debe ser de la misma clase, por lo que todo es coaccionado a personaje.

+2

Sé que te gusta la solución hoja.de.datos, pero si desea utilizar una matriz que podría obligar a su 'month' a numérico:' como .numeric (mes) 'y todos sus datos serían numéricos. – GSee

-1

F.Y.I.
Cuando una columna es "factor", simplemente/directamente usando as.numeric cambiará el valor en esa columna. La forma correcta es:

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

encontrar más detalles: Converting values to numeric, stack overflow

+0

Esto es solo para más información. Johannes ya respondió bien esta pregunta. –

Cuestiones relacionadas