2012-06-22 7 views
9

Mam wektor liczbowy (future_prices) w moim przypadku. Używam wektora daty z innego wektora (tutaj: pred_commodity_prices $ futuredays), aby tworzyć liczby dla miesięcy. Następnie używam cbind do wiązania miesięcy do wektora liczbowego. Stało się jednak tak, że wektor liczbowy stał się nieliczbowy. Czy wiesz, jaki jest tego powód? Kiedy używam as.numeric (future_prices) otrzymuję dziwne wartości. Co może być alternatywą? DziękiR: wektor liczbowy staje się nieliczbowy po cbind dat

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 

Odpowiedz

21

Powodem jest, że cbind zwraca macierz, a macierz może przechowywać tylko jeden typ danych. Zamiast tego można użyć numeru data.frame:

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

Zobacz ?format. Powraca format funkcyjne:

Przedmiotem strukturze podobnej do „x” zawierającej postać reprezentacje elementów pierwszego argumentu „x” w wspólnego formatu, w kodowaniu aktualnych lokali jest.

z ?cbind, cbind powraca

... macierzy łączenie „...” argumenty Kolumnowa lub w rzędach. (Wyjątek: jeśli nie ma wejścia lub wszystkie wejścia są „NULL”, wartość jest „NULL”.)

i wszystkie elementy macierzy musi być tej samej klasy, więc wszystko jest zmuszany do postać.

+2

Znam cię jak roztworze data.frame, ale jeśli chciał wykorzystać matrycę można zmusić swój 'month' do numeryczna:' jako .numeric (miesiąc) 'a wszystkie twoje dane będą numeryczne. – GSee

-1

F.Y.I.
Gdy jedna kolumna jest "czynnikiem", po prostu/bezpośrednio przy użyciu as.numeric zmieni wartość w tej kolumnie. Właściwym sposobem jest:

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

Znajdź więcej szczegółów: Converting values to numeric, stack overflow

+0

To tylko po więcej informacji. Johannes już dobrze odpowiedział na to pytanie. –

Powiązane problemy