在我的情况下,我有一个数字向量(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
答案 0 :(得分:23)
原因是cbind
返回一个矩阵,矩阵只能包含一种数据类型。您可以使用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
答案 1 :(得分:3)
请参阅?format
。 format
函数返回:
与包含字符的'x'结构相似的对象 a中第一个参数'x'的元素的表示 通用格式,以及当前语言环境的编码。
来自?cbind
,cbind
返回
...组合'...'参数的矩阵 按列或按行。 (例外:如果没有输入或 所有输入都是'NULL',值为'NULL'。)
并且矩阵的所有元素必须属于同一个类,因此所有内容都被强制转换为字符。
答案 2 :(得分:-1)
F.Y.I。
当一列是&#34; factor&#34;时,只需/直接使用as.numeric
即可更改该列中的值。正确的方法是:
data.frame[,2] <- as.numeric(as.character(data.frame[,2]))