如何将数据框列转换为数字类型
由于(仍然)没有人得到复选标记,我假设您考虑了一些实际问题,主要是因为您没有指定要转换为数值的向量类型。我建议您应用transform函数来完成任务
现在我将演示某些“转换异常”:
#创建虚拟数据.frame
d<;-数据帧(字符=字母[1:5],
伪字符=as.字符(1:5),
fac=系数(1:5),
char_fac=系数(字母[1:5]),
num=1:5,stringsAsFactors=FALSE)
让我们看一下data.frame
>;D
char fake\u char fac char\u fac num
1 a 11 a 1
2b2b2b2
3C3 3C3
4d4d4
5 e 5 5 e 5
让我们运行:
>;sapply(d,模式)
char fake\u char fac char\u fac num
“字符”“字符”“数字”“数字”“数字”
&燃气轮机;赛普利(d级)
char fake\u char fac char\u fac num
“字符”“字符”“因子”“因子”“整数”
现在你可能会问自己,“哪里有异常?”好吧,我在R中遇到了非常奇怪的事情,这并不是最让人困惑的事情,但它会让你困惑,特别是如果你在睡觉前读到这篇文章的话
下面是:前两列是字符。我故意打电话给2ndonefake\u char。找出这个字符变量与德克在回复中创建的变量的相似性。它实际上是一个转换成字符的数值向量。第3列rd和第4列th为因子,最后一列为“纯”数值
如果使用transform函数,则可以将伪字符转换为数值,但不能将字符变量本身转换
>;转换(d,char=as.numeric(char))
char fake\u char fac char\u fac num
1 NA 11 a 1
2钠2硼2
3na3c3
4 NA 4 d 4
5 NA 5 e 5
警告信息:
In eval(expr、envir、enclose):由强制引入的NAs
但是,如果你在假字符和字符fac上做同样的事情,你会很幸运,并且没有NA:
>;变换(d,伪字符=as.numeric(伪字符),
char\u fac=作为数字(char\u fac))
char fake\u char fac char\u fac num
1A 11
2B22
3C3
4d4
5 e 5 5 5
如果保存转换后的数据.frame并检查模式和类,您将得到:
>;D<;-变换(d,伪字符=as.numeric(伪字符),
char\u fac=作为数字(char\u fac))
&燃气轮机;sapply(D,模式)
char fake\u char fac char\u fac num
“字符”“数字”“数字”“数字”
&燃气轮机;赛普利(D级)
char fake\u char fac char\u fac num
字符“数字”因子“数字”整数
因此,结论是:是的,您可以将字符向量转换为数字向量,但前提是它的元素可以“转换”为数字如果向量中只有一个字符元素,则在尝试将该向量转换为数字元素时会出错
为了证明我的观点:
>;呃<;-c(1,“b”,3,4,“e”)
&燃气轮机;模式(错误)
[1] “角色”
&燃气轮机;类别(错误)
[1] “角色”
&燃气轮机;char<;-as.numeric(错误)
警告信息:
强制引入的NAs
&燃气轮机;烧焦
[1] 1 NA 3 4 NA
现在,为了好玩(或练习),试着猜一下这些命令的输出:
>;fac<;-as.因子(err)
&燃气轮机;工厂
???
&燃气轮机;num<;-as.数字(fac)
&燃气轮机;号码
???
向帕特里克·伯恩斯致以亲切的问候!=)