2012-06-22 12 views
9

Tôi có một vectơ số (tương lai_pric) trong trường hợp của tôi. Tôi sử dụng một vector ngày từ một véc tơ khác (ở đây: pred_commodity_prices $ futuredays) để tạo số cho các tháng. Sau đó tôi sử dụng cbind để liên kết các tháng với vector số. Tuy nhiên, đã xảy ra là vector số trở thành không phải là số. Bạn có biết lý do cho việc này là gì không? Khi tôi sử dụng as.numeric (future_prices) tôi nhận được các giá trị lạ. Điều gì có thể là một sự thay thế? Cảm ơnR: vectơ số không trở thành số không sau khi có ngày tháng

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 

Trả lời

21

Lý do là cbind trả về ma trận và ma trận chỉ có thể chứa một loại dữ liệu. Bạn có thể sử dụng số data.frame thay thế:

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

Xem ?format. Lợi nhuận format chức năng:

Một đối tượng về cấu trúc tương tự như ‘x’ có chứa nhân vật cơ quan đại diện của các yếu tố của đối số đầu tiên ‘x’ trong một định dạng phổ biến , và trong bảng mã miền địa phương hiện tại.

từ ?cbind, cbind lợi nhuận

... một ma trận kết hợp ‘...’ lập luận cột khôn ngoan hoặc hàng khôn ngoan. (Ngoại lệ: nếu không có đầu vào hoặc tất cả các đầu vào được 'NULL', giá trị là 'NULL'.)

và tất cả các yếu tố của một ma trận phải có cùng lớp, vì vậy mọi thứ đều bị cưỡng chế tính cách.

+2

Tôi biết bạn như giải pháp data.frame, nhưng nếu bạn muốn sử dụng một ma trận bạn có thể ép buộc 'month' của bạn để số: 'như .numeric (month) 'và tất cả dữ liệu của bạn sẽ là số. – GSee

-1

F.Y.I.
Khi một cột là "yếu tố", đơn giản/trực tiếp sử dụng as.numeric sẽ thay đổi giá trị trong cột đó. Cách thích hợp là:

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

Tìm thêm chi tiết: Converting values to numeric, stack overflow

+0

Đây chỉ là để biết thêm thông tin. Johannes cũng đã trả lời câu hỏi này. –