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返回一个矩阵,而一个矩阵只能保存一种数据类型。您可以使用 adata.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
于 2012-06-22T06:49:24.127 回答
3

?formatformat函数返回:

一个与“x”结构相似的对象,包含第一个参数“x”元素的字符表示,采用通用格式和当前语言环境的编码。

?cbind,cbind返回

... 一个矩阵组合 '...' 参数按列或按行。(例外:如果没有输入或所有输入均为“NULL”,则值为“NULL”。)

并且矩阵的所有元素都必须属于同一类,因此所有内容都被强制转换为字符。

于 2012-06-22T06:48:43.197 回答
-1

仅供参考
当一列是“因子”时,简单/直接使用as.numeric将更改该列中的值。正确的方法是:

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

查找更多详细信息:将值转换为数字、堆栈溢出

于 2018-02-19T23:30:08.407 回答