由于(仍然)没有人得到复选标记,我假设您考虑了一些实际问题,主要是因为您没有指定要转换为的向量类型numeric
。我建议你应该申请transform
功能以完成您的任务。
现在我要演示某些“转换异常”:
# create dummy data.frame
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
让我们看一下data.frame
> d
char fake_char fac char_fac num
1 a 1 1 a 1
2 b 2 2 b 2
3 c 3 3 c 3
4 d 4 4 d 4
5 e 5 5 e 5
让我们运行:
> sapply(d, mode)
char fake_char fac char_fac num
"character" "character" "numeric" "numeric" "numeric"
> sapply(d, class)
char fake_char fac char_fac num
"character" "character" "factor" "factor" "integer"
现在你可能会问自己“异常在哪里?”嗯,我在 R 中遇到了非常奇怪的事情,而这不是the最令人困惑的事情,但它可能会让你感到困惑,特别是如果你在上床睡觉之前读到这篇文章。
Here goes: first two columns are character
. I've deliberately called 2nd one fake_char
. Spot the similarity of this character
variable with one that Dirk created in his reply. It's actually a numerical
vector converted to character
. 3rd and 4th column are factor
, and the last one is "purely" numeric
.
如果您使用transform
函数,您可以将fake_char
into numeric
,但不是char
变量本身。
> transform(d, char = as.numeric(char))
char fake_char fac char_fac num
1 NA 1 1 a 1
2 NA 2 2 b 2
3 NA 3 3 c 3
4 NA 4 4 d 4
5 NA 5 5 e 5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion
但如果你做同样的事情fake_char
and char_fac
,你会很幸运,并且不会出现 NA 的情况:
> transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
char fake_char fac char_fac num
1 a 1 1 1 1
2 b 2 2 2 2
3 c 3 3 3 3
4 d 4 4 4 4
5 e 5 5 5 5
如果保存转换后的data.frame
并检查mode
and class
, 你会得到:
> D <- transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
> sapply(D, mode)
char fake_char fac char_fac num
"character" "numeric" "numeric" "numeric" "numeric"
> sapply(D, class)
char fake_char fac char_fac num
"character" "numeric" "factor" "numeric" "integer"
所以,结论是:是的,您可以转换character
向量化为numeric
一,但前提是它的元素可以“转换”为numeric
.