2012-06-22 8 views
9

Ich habe einen numerischen Vektor (future_prices) in meinem Fall. Ich verwende einen Datumsvektor aus einem anderen Vektor (hier: pred_commodity_prices $ futuredays), um Zahlen für die Monate zu erstellen. Danach verwende ich cbind, um die Monate an den numerischen Vektor zu binden. Es ist jedoch passiert, dass der numerische Vektor nicht-numerisch wird. Weißt du, was der Grund dafür ist? Wenn ich as.numeric (future_prices) verwende, bekomme ich seltsame Werte. Was könnte eine Alternative sein? DankeR: numerischer Vektor wird nach Zahlen von Daten nicht-numerisch

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 

Antwort

21

Der Grund ist, dass cbind eine Matrix zurückgibt und eine Matrix nur einen Datentyp enthalten kann. Sie könnten stattdessen eine data.frame verwenden:

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

Siehe ?format. Die format Funktion zurückkehrt:

die Aufgabe ähnlicher Struktur wie ‚x‘ enthält Zeichen Darstellungen der Elemente des ersten Arguments ‚x‘ in ein gemeinsamen Format, und in der aktuellen locale der Codierung.

von ?cbind, cbind kehrt

... eine Matrix, die die Kombination von ‚...‘ Argumente spaltenweise oder zeilenweise. (Ausnahme: wenn es keine Eingänge oder alle Eingänge ‚NULL‘ ist der Wert ‚Null‘.)

und alle Elemente einer Matrix muss der gleichen Klasse sein, so ist alles, was dazu gezwungen zu Charakter.

+2

ich Sie wie die data.frame Lösung kennen, aber wenn man eine Matrix verwenden wollten könnten Sie Ihre 'month' in numerischer coerce:' als .numeric (Monat) 'und alle Ihre Daten wären numerisch. – GSee

-1

F.Y.I.
Wenn eine Spalte "Faktor" ist, ändert einfach/direkt as.numeric den Wert in dieser Spalte. Der richtige Weg ist:

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

mehr Details finden: Converting values to numeric, stack overflow

+0

Dies ist nur für weitere Informationen. Johannes hat diese Frage bereits gut beantwortet. –

Verwandte Themen