17

私の場合、数値ベクトル (future_prices) があります。別のベクトル (ここでは pred_commodity_prices$futuredays) からの日付ベクトルを使用して、月の数値を作成します。その後、cbind を使用して月を数値ベクトルにバインドします。ただし、数値ベクトルが非数値になることがありました。この理由がどのようになっているのか知っていますか?as.numeric(future_prices) を使用すると、奇妙な値が得られます。代替案は何ですか?ありがとう

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 
4

3 に答える 3

26

その理由は、 が行列をcbind返し、行列が保持できるデータ型は 1 つだけだからです。data.frame代わりにa を使用できます。

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
于 2012-06-22T06:49:24.127 に答える
3

を参照してください?formatformat関数は次を返します。

最初の引数 'x' の要素の文字表現を共通の形式と現在のロケールのエンコーディングで含む 'x' と同様の構造のオブジェクト。

から?cbindcbind戻ります

... '...' 引数を列方向または行方向に組み合わせた行列。(例外: 入力がない場合、またはすべての入力が 'NULL' の場合、値は 'NULL' です。)

行列のすべての要素は同じクラスでなければならないため、すべてが文字に強制されます。

于 2012-06-22T06:48:43.197 に答える